我正在开发一个解析来自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
显然,第二个代码块不是有效的代码,我只是希望它有助于说明我想要实现的目标。
提前感谢您的帮助!
答案 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”事件填充正确的数组。