我的應用程序包含許多核心數據NSManagedObject子類,所有這些子類都有一個NSDate,我稱之爲他們的recordID。當比較兩個對象時,我想使用這些數據來確定它們是否相同。現在,因爲有很多子類,我創建了一個協議,表明他們都實現的recordId:不能讓Swift使用我的通用==運算符
protocol HasID
{
var recordID: NSDate {get}
}
簡單,對不對?現在我已經實現了==操作符如下:
func == <T: HasID>(left: T, right: T) -> Bool
{
return left.recordID == right.recordID ? true : false
}
Problem-斯威夫特不使用我美麗的==操作符,而是使用一些通用的廢話如下
func ==(lhs: NSObject, rhs: NSObject) -> Bool
如果我實現了現在比較==爲每個單獨的子類如下
func == (left: Pilot, right: Pilot) -> Bool
{
return left.recordID == right.recordID ? true : false
}
然後它使用我的操作員和工作。 (我也得到了一個==運算符爲NSDate實現,這就是爲什麼上面的代碼很好。)
任何想法如何讓我的泛型==運算符被使用,而不是NSObject之一?
你是否在類之外聲明瞭==運算符? – 2015-03-31 16:51:35
我不確定,但是對託管對象子類(即使它工作)重寫'=='*可能會成爲一個問題,因爲NSManagedObject文檔明確指出必須重寫'isEqual:'must * absoluty'。 - 我會建議定義一個自定義比較運算符。 – 2015-03-31 16:56:43
你是否符合'Equatable'? – ztan 2015-03-31 17:02:01