【问题标题】:Swift - downcast array of arrays won't compileSwift - 向下转换的数组数组不会编译
【发布时间】:2015-09-03 14:48:41
【问题描述】:

如何将 AnyObject arrays 数组向下转换为 String arrays 数组?

我尝试了以下代码:

let v1:[[AnyObject]] = [["hello"]] // v1 type is [[AnyObject]]
let v2 = v1 as! [[String]]         // compile error!

但此代码不会编译并出现错误:

'String' 与 'AnyObject' 不同

如果我只是尝试将AnyObject 的数组向下转换为String 的数组,它可以正常工作:

let v1:[AnyObject] = ["hello"] // v1 type is [AnyObject]
let v2 = v1 as! [String]       // v2 type is [String] as expected

【问题讨论】:

    标签: ios swift casting


    【解决方案1】:

    您已经回答了自己的问题。在第一个代码中,对数组的每个元素执行您在第二个代码中成功执行的操作。像这样:

    let v2 = v1.map {$0 as! [String]}
    

    【讨论】:

    • 感谢马特,这解决了编译器错误))你知道它是否有性能影响吗?这是进行选角的合理方式吗?
    • 它的作用与强制转换完全相同。你的as! [String] 只是一个简写,一点语法糖;运行时必须循环遍历整个数组以单独转换每个元素。这一模一样,不多也不少。唯一的区别是我们没有得到一个神奇的速记。
    • 10x 非常有帮助
    • 事实上,如果我没记错的话,早在 Swift 的早期,maponly 转换数组元素的方法;没有as! [String] 速记。我们很好地度过了那个时期! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    相关资源
    最近更新 更多