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

时间:2014-12-03 22:31:28

标签: ios for-loop swift casting

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

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

有没有办法在for-loop中输入对象以避免写两行? 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”
*/
}

感谢任何帮助

2 个答案:

答案 0 :(得分:7)

试试这个:

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

答案 1 :(得分:1)

根据您使用for循环的方式,可能更可取的是使用compactMap(或者如果您在Swift 4.1之前是flatMap)将对象映射到新数组:

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

现在,您仅具有一个数组XYZClass对象,而所有其他对象类型均已删除。