【问题标题】:Type cast array elements in for loop在 for 循环中键入强制转换数组元素
【发布时间】:2014-12-03 22:31:27
【问题描述】:

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

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


    【解决方案1】:

    试试这个:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-28
        • 1970-01-01
        • 2020-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-28
        • 1970-01-01
        相关资源
        最近更新 更多