我是Realm的新手,遇到了一些麻烦。所以我在一个函数中有一个变量,它返回一个所有“所有者”的用户列表,如下所示:
var namesOfUsers: String = list.users
.flatMap({ $0 as? OwnersModel })
.reduce("", combine: { (namesOfUsers, owner) -> String in
guard let fullName = owner.name else {
return namesOfUsers
}
return namesOfUsers + name + ", "
})
其中一些“所有者”也是“买家”,有些则不是。如何退回“所有者”列表,但不包括也是“买家”的所有者?
答案 0 :(得分:2)
首先,我建议使用flatMap
和joinWithSeparator
代替reduce
。
var namesOfUsers: String = list.users
.flatMap({ $0 as? OwnersModel })
.filter({ !$0.isBuyer }) // Rejects buyers
.flatMap({ $0.name })
.joinWithSeparator(", ")
这也可以避免在撰写的字符串末尾添加额外的逗号,例如: "a, b"
代替"a, b, "
。
除此之外,如果你的集合是统一的,并且从Realm中检索一个惰性集合,例如List
或Results
的实例,然后您可以使用NSPredicate
来过滤您的对象,这些对象将直接在数据库上执行,速度更快,成本更低。
let users: Results<OwnersModel> = …
users.filter("isBuyer == false")