2017-02-11 88 views
0

我正在研究解析來自Web服務的XML響應的應用程序。該Web服務將使用對象堆棧來返回多個不同類型對象的多個實例。我只想把這些對象和他們填充到一個數組中。現在我有一個開關,它基於「objectStack.last」類型重複幾行不同的類似代碼。這是什麼樣子,現在的XML解析器的parserDidEndElement功能:Swift:使用變量修改數組以指定數組名稱

switch(objectStack.last){ 
    case _ as apple: 
     apples.removeAll() 
     for apple in objectStack as! [apple]{ 
      apples.append(apple.name.value) 
     objectType = "apple" 
     } 
    case _ as orage: 
     oranges.removeAll() 
     for orange in objectStack as! [orange]{ 
      oranges.append(orange.name.value) 
     } 
     objectType = "orange" 
    case _ as bananas: 
     bananas.removeAll() 
     for banana in objectStack as! [banana]{ 
      bananas.append(banana.name.value) 
     } 
     objectType = "banana" 
    case default: 
     break 

的問題是,Web服務將返回大量不同類型的,我寧可不要建立一個開關每個案件。爲了討論的目的,假設我已經爲每種類型創建了一個空數組,只需在類型名稱中添加「s」(即蘋果,桔子和香蕉)即可。有沒有辦法讓我使用變量來操作數組?事情是這樣的:

objectStack.last + "s".removeAll() 
    for objectStack.last in objectStack.last + "s" as! [objectStack.last]{ 
     objectStack.last + "s".append(objectStack.last.name.value) 
     objectType = objectStack.last 
    } 

顯然,這第二個代碼塊是無效的代碼,我只是希望這有助於說明什麼,我試圖完成。

在此先感謝您的幫助!

+0

將em放在字典中是最明顯的答案 –

+0

@DavidBerry那將是什麼樣子? – GED125

回答

0

我最終使用繼承來解決我的問題。雖然我有許多類型的對象,但我創建了一個「baseObject」類,其中包含我需要的字段才能成功。當時我能夠使用以下:

for obj in objectStack{ 
    let obj2 = obj as! baseObject 
    fieldArrays[objectType]!.append(obj2.name.value) 
} 

I also used the solution here使用字典來填充使用詞典中的「didSet」事件正確的數組。