Swift:使用变量修改数组以指定数组名称

时间:2017-02-11 05:51:56

标签: swift

我正在开发一个解析来自Web服务的XML响应的应用程序。此Web服务将使用对象堆栈返回多个不同类型的对象的多个实例。我只想获取这些对象并将它们填充到数组中。现在我有一个开关,重复几个不同的类似代码行,基于" objectStack.last"类型。这就是它现在在XML解析器的parserDidEndElement函数中的样子:

"sam_sam",
"sam_frank",
"sam_pete",
"frank_sam",
"frank_frank",
"frank_pete",
"pete_sam",
"pete_frank",
"pete_pete"

问题是webservice将返回大量不同类型,我宁愿不必为每个类型构建一个switch case。出于本讨论的目的,我们假设我已经为每种类型创建了一个空数组,只需添加一个" s"到类型名称(即苹果,橘子和香蕉)。有没有办法让我使用变量操作数组?像这样:

    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

显然,第二个代码块不是有效的代码,我只是希望它有助于说明我想要实现的目标。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我最终使用继承来解决我的问题。虽然我有很多类型的对象,但是我创建了一个“baseObject”类,其中包含了成功所需的字段。然后我就可以使用以下内容:

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

I also used the solution here使用字典使用字典上的“didSet”事件填充正确的数组。