Swift - 向下转换的数组数组将无法编译

Eya*_*yal 5 casting ios swift

如何将数组AnyObject 数组转换为数组String 数组

我尝试了以下代码:

let v1:[[AnyObject]] = [["hello"]] // v1 type is [[AnyObject]]
let v2 = v1 as! [[String]]         // compile error!
Run Code Online (Sandbox Code Playgroud)

但是这段代码不会编译错误:

'String'与'AnyObject'不同

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

let v1:[AnyObject] = ["hello"] // v1 type is [AnyObject]
let v2 = v1 as! [String]       // v2 type is [String] as expected
Run Code Online (Sandbox Code Playgroud)

mat*_*att 9

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

let v2 = v1.map {$0 as! [String]}
Run Code Online (Sandbox Code Playgroud)

  • 它与铸造完全相同.你的`as![String]`只是一个简写,一点句法糖; 运行时_must_循环遍历_whole_数组以单独转换每个元素.这是_exactly_相同,不多也不少.唯一的区别是我们没有得到一个神奇的速记. (2认同)