我想要一个来自超类数组的子类数组。请参阅我的代码示例:
class A {}
class B: A {}
let arr: [A] = [A(), B()]
let arrOfBs: [B] = arr.filter { $0 as B } // Error here
如何正确过滤掉所有蜜蜂?
答案 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 let
或guard