Swift ';任何对象';没有名为xxx的成员

Swift ';任何对象';没有名为xxx的成员,swift,Swift,有一个方法接收“AnyObject”数组。然后在方法内部根据某些条件将任意对象强制转换为特定对象。到目前为止没有问题。将AnyObject强制转换为特定对象后,如果我尝试访问它的属性,它将抛出错误。我理解错误产生的原因。但是,在任何其他逻辑中,有没有其他方法可以获得相同的结果呢。这是代码 func downloadImage(#list: Array<AnyObject>, forControler: String) { var xxxList: Array<AnyOb

有一个方法接收“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
    }
}
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循环移到外部,否则会出现相同的错误。