2017-08-29 58 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,請在項目中使用這段代碼時記住這一點。