我有一個協議叫做SomeProtocol
迅速如何比較泛型
我想創建得到,確認該協議對象的功能,並將其添加到一個數組。
然後我有另一個功能,從該數組中刪除一個對象。
var allObjs = [SomeProtocol]()
func addObj<T: AnyObject where T: SomeProtocol>(obj: T) {
allObjs.append(obj)
}
func removeObj<T: AnyObject where T: SomeProtocol>(obj: T) {
for someObj in allObjs {
if someObj == obj { // compile time error -> Binary operator '==' cannot be applied to operands of type 'SomeProtocol' and 'T'
}
}
}
此代碼將導致一個編譯時錯誤「二元運算符‘==’不能應用於類型‘SomeProtocol’的操作數和‘T’」
不知道我怎樣才能解決這個問題,無論是對象定義爲AnyObject,它確認了SomeProtocol協議,那麼這裏有什麼問題?
問自己的問題:你期待'=='做什麼?這種在兩個任意'SomeProtocol'類型上使用'=='的能力來自哪裏?你定義了一個帶有兩個'SomeProtocol'的'=='運算符嗎?你想_reference_平等('==='而不是'==')? –
是的,我想要一個參考平等只是爲了檢查這是否是相同的對象,但===不工作以及 – Mario
可能重複的[在Swift中比較兩個自定義對象](http://stackoverflow.com/questions/ 29942511 /比較兩個自定義對象在迅速),和[這個答案](http://stackoverflow.com/a/29943227/1187415)應該解決您的問題。 –