如何在 swift 中过滤返回原始类子类数组的类数组?[复制]

How do I filter an array of a class in swift that returns an array of a subclass of the original class? [duplicate]

提问人:daniel 提问时间:9/26/2022 更新时间:9/26/2022 访问量:72

问:

如何过滤某个类的对象数组并将结果返回到原始类的子类的数组?具体来说,要过滤和数组 CKRecord 并将结果返回到 [CKShare] 数组,如下所示:

let records = [CKRecord]()

let shares: [CKShare] = records.filter({ $0 is CKShare })

上面的代码生成代码时错误消息“无法将类型'[CKRecord]'的值分配给类型'[CKShare]'”。

我想知道我是否可以使用 map 方法与 filter 方法一起使用来做我想做的事情,或者 map 方法的一个版本。

Swift 筛选器 转换 映射

评论


答:

1赞 Nirav D 9/26/2022 #1

用于此目的。compactMap

let shares = records.compactMap({ $0 as? CKShare })

如果你也想过滤你的记录,那么你可以这样写。

//Replace $0.isEnable with your condition, if that is true then cast it for sub class CKShare else return nil
let shares = records.compactMap({ $0.isEnable ? $0 as? CKShare : nil })

评论

0赞 daniel 9/26/2022
还行。我得到了和let shares: [CKShare] = records.filter({ $0 is CKShare }).map({ $0 as! CKShare })
1赞 Nirav D 9/26/2022
但是你循环了两次,这是不必要的,是compactMapfilter + map
0赞 daniel 9/26/2022
是的。我试图点击复选标记来接受你的答案。它直到一分钟才让我这样做。谢谢。
1赞 Nirav D 9/26/2022
欢迎:),是的,我知道在计时器上接受,我说的是而不是循环两次更好使用。compactMap