有一种接收'AnyObject'数组的方法。然后在基于某些条件的方法内部将AnyObject强制转换为特定对象。到目前为止没有问题。将AnyObject转换为特定对象后,如果我尝试访问它的属性,则会抛出错误。我理解错误即将发生的原因。但是有没有其他方法可以在任何其他逻辑中获得相同的。这是代码。
func downloadImage(#list: Array<AnyObject>, forControler: String) {
var xxxList: Array<AnyObject>
if forControler == "A" {
xxxList = list as! Array<A>
} else if forControler == "B" {
xxxList = list as! Array<B>
} else {
xxxList = list as! Array<C>
}
for (index, url) in enumerate(xxxList) {
url.A
}
}
错误引发url.A
由于
答案 0 :(得分:0)
您的代码中有多个错误。
首先,当在Swift中声明一个var(这里是xxxList
)时,你必须在之后初始化它。否则,需要将此var标记为可选。
你得到编译器的错误是&#34; dumb&#34;。它不知道包装到数组中的对象的实际类型是什么。它只能看到AnyObject
个对象,它们没有任何A
字段或属性。在迭代之前,您必须将列表转换为所需的类型。
您的代码应该是这样的:
func downloadImage(#list: [AnyObject], forController: String) {
if forController == "A" {
var aList = list as! [A]
// for loop iterating over A objects
} else if forController == "B" {
var bList = list as! [B]
// for loop iterating over B objects
} else {
var cList = list as! [C]
// for loop iterating over C objects
}
}
您必须为每种类型定义一个循环。好吧,你也可以定义一个循环并执行转换(将if
语句移动到该循环中)。