提问人:daniel 提问时间:9/26/2022 更新时间:9/26/2022 访问量:72
如何在 swift 中过滤返回原始类子类数组的类数组?[复制]
How do I filter an array of a class in swift that returns an array of a subclass of the original class? [duplicate]
问:
如何过滤某个类的对象数组并将结果返回到原始类的子类的数组?具体来说,要过滤和数组 CKRecord 并将结果返回到 [CKShare] 数组,如下所示:
let records = [CKRecord]()
let shares: [CKShare] = records.filter({ $0 is CKShare })
上面的代码生成代码时错误消息“无法将类型'[CKRecord]'的值分配给类型'[CKShare]'”。
我想知道我是否可以使用 map 方法与 filter 方法一起使用来做我想做的事情,或者 map 方法的一个版本。
答:
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
但是你循环了两次,这是不必要的,是compactMap
filter + map
0赞
daniel
9/26/2022
是的。我试图点击复选标记来接受你的答案。它直到一分钟才让我这样做。谢谢。
1赞
Nirav D
9/26/2022
欢迎:),是的,我知道在计时器上接受,我说的是而不是循环两次更好使用。compactMap
评论