从超类数组中筛选出子类

时间:2018-04-23 18:41:28

标签: swift

我想要一个来自超类数组的子类数组。请参阅我的代码示例:

class A {}
class B: A {}

let arr: [A] = [A(), B()]

let arrOfBs: [B] = arr.filter { $0 as B } // Error here

如何正确过滤掉所有蜜蜂?

2 个答案:

答案 0 :(得分:1)

只需使用compactMap

let arrOfBs = arr.compactMap { $0 as? B }

(或flatMap代表Swift< 4.1)

从技术上讲,你也可以使用:

let arrOfBs = arr.filter { $0 is B } as! [B]

但是compactMap更简单,没有令人讨厌的强制转换。

答案 1 :(得分:0)

您正在过滤可以使用is而不是as

的数据类型
    class A {}
    class B: A {}

    let arr: [A] = [A(), B()]

    let arrOfBs = arr.filter { $0 is B } as? [B]
    print(arrOfBs?.count)
  

注意此结果可选,您可以使用if letguard