Ben derleyici hatası alıyorum: (hata İkili operatör '===' iki 'T' operandların için uygulanamaz) T.Genel bir tür için === operatörüne izin vermek için hangi protokolün genişletilmesi gerekiyor?</p> <blockquote> <p>Binary operator '===' cannot be applied to two 'T' operands</p> </blockquote> T jenerik türüdür <p>ve ben sadece iki öğe kıyaslıyorum:
Bu yüzden ===
operatörünün T protokolünü kullanarak T üzerinde kullanılabileceğini söylemem gerektiğini farz ediyorum. ==
olsaydı Equatable
kullanırdım, ancak kimlik karşılaştırması için ne kullanacağımı göremiyorum.
Ya da bir iş var mı?
DÜZENLEME: Burada
problemi gösteren bir kod örneklem parçasıdır. Sınıf oluşturulduğunda derleme hatasına neden olan 'AnyObject' ekledim. 'AnyObject' kaldırılırsa, '===' üzerinde bir hataya neden olur.
import Foundation
protocol Messenger : AnyObject {
func notify();
}
class PostOffice<T : AnyObject> {
var messengers : [T] = []
func addMessenger(messenger : T) {
messengers.append(messenger)
}
func deleteMessenger(messenger : T) {
for i in 0 ..< messengers.count {
if messengers[i] === messenger { // error if AnyObject not used
messengers.removeAtIndex(i)
return
}
}
}
func handleDelivery(messenger : T) {} // to be overridden
func deliver() {
for messenger in messengers {
handleDelivery(messenger)
}
}
}
let p : PostOffice<Messenger> = PostOffice<Messenger>() // error if AnyObject used
bu durumda hatadır:
Using 'Messenger' as a concrete type conforming to 'AnyObject' is not support.
derleme hatası nedir? – nhgrif
Ve bu arada, "deleteMessenger" inizde, aynı nesne birden çok kez varsa, içinde bir kilitlenme veya hata var. Ön tarafa çalışmalısın. – nhgrif