2017-02-11 7 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 
    } 

明らかに、この2番目のコードブロックが有効なコードではありません、私はちょうどそれは私が達成しようとしているものを説明するのに役立ちます願っています。

ご協力いただきありがとうございます。

+0

辞書に入れておくのがもっとも明白な答えです。 –

+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」イベントを使用して、正しい配列を移入するために辞書を使用するために:私は、以下を使用することができました。

関連する問題