在for循环中键入强制转换数组元素

问题描述 投票:3回答:2

在委托方法中,我得到一个自定义对象类型的“结果”数组,我想循环遍历数组元素。我现在做以下,这是有效的

for result in results {
    if result is XYZClass {     
        //This Works!    
    }
}

有没有办法在for循环中输入对象以避免写两行? swift允许这个吗?用于在Objective-C中相当容易地完成此操作

for (XYZClass *result in results) {

}

但是,我没有在Swift中取得成功。我试过没有运气的显式演员。

for result as XYZClass in results {
    //ERROR: Expected ‘;’ in ‘for’ statements
}

for result:AGSGPParameterValue in results {
    /* ERROR: This prompts down cast as 
    for result:AGSGPParameterValue in results as AGSGPParameterValue { }
    which in turn errors again “Type XYZClass does not conform to Sequence Type”
*/
}

任何帮助表示赞赏

ios for-loop swift casting
2个回答
7
投票

试试这个:

for result in results as [XYZClass] {
    // Do stuff to result
}

1
投票

根据你使用for循环的方式,最好使用compactMap(或者如果你在Swift 4.1之前使用flatMap)将你的对象映射到一个新数组:

let onlyXyzResults: [XYZClass] = results.compactMap { $0 as? XYZClass }

现在只有一个数组XYZClass对象,删除了所有其他对象类型。

© www.soinside.com 2019 - 2024. All rights reserved.