2017-08-29 62 views
0

的结果我有一个境界声明像境界IOS铸造关闭

let foundFruits = try! Realm().objects(fruits.self).filter("color = 'red'") 

这个我在泰伯维 使用的结果。 。 。

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

你试图实现的是不可能的。 Realm不提供自定义过滤器块的功能,因此如果要保留自动更新Results类型的查询,则需要使用NSPredicate来过滤结果。但是,您只能使用常量或键路径进行NSPredicate之间的比较,因此"weight > 0.7*maxWeight"会导致无效谓词。

一个可行的解决方法似乎是为您的对象类创建一个计算属性,其值将为0.7*maxWeight,但是也可以是Realm doesn't support computed properties in queries

想要实现的过滤只能使用Swift的内置过滤器方法,但正如您所看到的,使用内置Swift过滤器的返回类型不会是Results

如果您真的需要这个谓词,那么目前可行的解决方法是将结果存储在Swift数组中,并在每次需要使用它时更新该数组。您可以声明foundFruitsArray<Fruit>类型的计算属性,这种方式当您试图访问它时,它会自动更新(即使性能可能会比Results更差,因为使用此操作,您需要运行每次访问`foundFruits时查询)。

这是,你怎么可以实现变通方法:

var foundFruits: Array<Fruit> { 
    return Array(try! Realm().objects(Fruit.self).filter({Double($0.normalWeight) > 0.7*Double($0.maxWeight)})) 
} 

print(foundFruits) 

另外,还要确保你符合雨燕命名约定,这是上层驼峰的类名。为此,我已将fruits类更名为Fruit,请在项目中使用这段代码时记住这一点。