【问题标题】:Convert NSArray to Swift Array<T> and filter out Elements not matching T将 NSArray 转换为 Swift Array<T> 并过滤掉与 T 不匹配的元素
【发布时间】:2015-05-07 07:54:00
【问题描述】:

如果所有元素确实已经是 T 类型,那么将 NSArray 转换为 T 类型的 Swift Array 很容易:

let arr1 : NSArray = [1,2,3]
let arr2 = arr1 as? Array<Int> // works

但现在假设一个非同质的NSArray 与不匹配T 的对象:

let arr1 : NSArray = [1,2,3,"a"]
let arr2 = arr1 as? Array<Int> // nil, as not all elements are of type Int

我试图实现的是过滤掉所有与T 不匹配的元素。因此,在上述情况下,我想获得一个 Array&lt;Int&gt;,其中仅包含对象 [1,2,3]

如何优雅地做到这一点?

【问题讨论】:

  • 我不确定,但您能否创建一个 [Any],然后在转换为 &lt;T&gt; 数组之前按类型对其进行过滤?

标签: ios objective-c casting nsarray


【解决方案1】:

精简:

let arr1 : NSArray = [1,2,3,"a"]
let arr2 = (arr1 as Array<AnyObject>).filter { $0 is Int } as! Array<Int>

一步一步:

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 

【讨论】:

  • 是的,就是这个:D
猜你喜欢
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多