Swift ';任何对象';没有名为xxx的成员
有一个方法接收“AnyObject”数组。然后在方法内部根据某些条件将任意对象强制转换为特定对象。到目前为止没有问题。将AnyObject强制转换为特定对象后,如果我尝试访问它的属性,它将抛出错误。我理解错误产生的原因。但是,在任何其他逻辑中,有没有其他方法可以获得相同的结果呢。这是代码Swift ';任何对象';没有名为xxx的成员,swift,Swift,有一个方法接收“AnyObject”数组。然后在方法内部根据某些条件将任意对象强制转换为特定对象。到目前为止没有问题。将AnyObject强制转换为特定对象后,如果我尝试访问它的属性,它将抛出错误。我理解错误产生的原因。但是,在任何其他逻辑中,有没有其他方法可以获得相同的结果呢。这是代码 func downloadImage(#list: Array<AnyObject>, forControler: String) { var xxxList: Array<AnyOb
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
}
}
func downloadImage(#list:Array,forcontroller:String){
变量xxxList:数组
如果forControler==“A”{
xxxList=列表为!数组
}如果forControler==“B”,则为else{
xxxList=列表为!数组
}否则{
xxxList=列表为!数组
}
用于枚举(xxxList)中的(索引、url){
url.A
}
}
url.A中出现错误
谢谢您的代码中有多个错误 首先,在Swift中声明var时(此处为
xxxList
),您必须在声明后立即对其进行初始化。否则,需要将此变量标记为可选
如果编译器是“dumb”,则会出现该错误。它不知道包装到数组中的对象的真正类型是什么。它只看到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
语句移动到该循环中)。列表的类型是在您编写var xxxList:Array
时确定的。这不会随着您为其分配不同类型的列表而更改。您已将其声明为anyobject。铸造不会改变它的类型是的。我明白了。任何其他我可以读取url值的方法。因为其余的逻辑对于所有特定对象都是相同的。感谢您指出xxxList声明。如果我想有多个变量和多个for循环,我可能不会发布这个问题。不能将for循环移到外部,否则会出现相同的错误。