2015-04-23 36 views
2

我有一個包含RLMObjects的tableView,並且想要搜索包含特定RLMObject的行。 鑄造RLMResult對象到其原始類型後,它是不一樣的,作爲初始對象:在Realm Cocoa中RLMObjects未被識別爲相同

// ... adding a todoA with !isCompleted to defaultRealm() 
    var firstItem = Todo.objectsWhere("isCompleted == false")[0] as! ToDo 
    if firstItem == todoA { 
     // todoA is != firstItem even-though they should be the same object 
    } 

我如何可以比較兩個RLMObjects,而無需實現配置的PrimaryKey?

回答

3

RLMObject不符合斯威夫特的Equatable協議,允許==!=比較。根據你想爲你的對象相等語義,你可以在RLMObject使用以下擴展名:

extension RLMObject: Equatable {} 
func == <T: RLMObject>(lhs: T, rhs: T) -> Bool { 
    return lhs.isEqualToObject(rhs) 
} 
+0

'isEqualToObject'仍然沒有給出正確的結果。我可以以某種方式訪問​​計算(內部)primaryKey並比較它們嗎? –

+0

isEqualToObject將使用這些相等語義:https://github.com/realm/realm-cocoa/blob/8a49cab247de5005e328cf486fe85fbf13d3f1cf/Realm/RLMObjectBase.mm#L279-L303。如果你想要不同的語義,你可以自由地這樣做。 – jpsim

+0

'(o1 == o2)'即使它是同一個對象也不會給出'true'。似乎將'o1'作爲RLMResult並將其轉換爲與原始文件不同的身份。有沒有什麼辦法可以讓primaryKey自己實現呢?不想爲自己管理對象的唯一鍵,但讓它們可以啓用比較。 –