fab*_*abb 3 casting objective-c nsarray ios
如果所有元素都已经是类型,那么转换NSArray为Swift Array类型T很容易T:
let arr1 : NSArray = [1,2,3]
let arr2 = arr1 as? Array<Int> // works
Run Code Online (Sandbox Code Playgroud)
但现在假设一个非同质NSArray的对象不匹配T:
let arr1 : NSArray = [1,2,3,"a"]
let arr2 = arr1 as? Array<Int> // nil, as not all elements are of type Int
Run Code Online (Sandbox Code Playgroud)
我试图实现的是向下过滤掉所有不匹配的元素T.所以在上面的例子中我想得到一个只Array<Int>包含对象的东西[1,2,3].
如何优雅地做到这一点?
凝结:
let arr1 : NSArray = [1,2,3,"a"]
let arr2 = (arr1 as Array<AnyObject>).filter { $0 is Int } as! Array<Int>
Run Code Online (Sandbox Code Playgroud)
一步步:
let arr2 = arr1 as Array<AnyObject> // convert NSArray to Array of AnyObject
let arr3 = arr2.filter { $0 is Int } // keep only objects that are of type Int
let arr4 = arr3 as! Array<Int> // force cast to Array<Int>, as now you know that all objects are of that type
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1411 次 |
| 最近记录: |