我有一个像
这样的领域声明let foundFruits = try! Realm().objects(fruits.self).filter("color = 'red'")
我在Tableview中使用的结果 。 。
let fruit = foundFruits[indexPath.row]
cell.color.text = fruit.color
。 。 。 现在我做了第二个声明,如
let foundFruits = try! Realm().objects(fruits.self).filter({ $0.weight > o.7 $0.maxweight })
但由于关闭,我得到了错误
无法指定类型的值 'LazyFilterBidirectionalCollection>'输入 '结果'
如何转换第二个语句的结果,以便我可以将它用于我的tableview ??
答案 0 :(得分:-1)
你想要实现的目标是不可能的。 Realm不提供自定义过滤器块的功能,因此如果要保留查询的自动更新Results
类型,则需要使用NSPredicate
来过滤结果。但是,您只能在NSPredicate
中使用常量或键路径进行比较,因此"weight > 0.7*maxWeight"
会导致谓词无效。
一个可行的解决方法似乎是为您的对象类创建一个计算属性,其值为0.7*maxWeight
,但Realm doesn't support computed properties in queries也是。
您希望实现的过滤只能使用Swift内置的过滤方法,但正如您所看到的,使用内置Swift过滤器的返回类型将不是Results
。
如果你真的需要这个谓词,目前,一个可行的解决方法是将结果存储在Swift数组中,并在每次需要使用它时更新该数组。您可以将foundFruits
声明为Array<Fruit>
类型的计算属性,这样当您尝试访问它时,它会自动更新(即使性能可能会比{{1更差)因为使用它,每次访问`foundFruits时都需要运行查询。
这就是您如何实现变通方法:
Results
还要确保符合Swift命名约定,即类名称的Upper-camelCase。为此,我已将您的var foundFruits: Array<Fruit> {
return Array(try! Realm().objects(Fruit.self).filter({Double($0.normalWeight) > 0.7*Double($0.maxWeight)}))
}
print(foundFruits)
课程重命名为fruits
,请在项目中使用此代码时牢记这一点。