Kann ich Protokollkonformität über eine schnelle Erweiterung zu einem Protokoll hinzufügen?Swift 2 Protokollkonformität zu Protokollen hinzufügen
//Plain old protocol here
protocol MyData {
var myDataID: Int { get }
}
Ich mag das MyData
Protokoll gleichzusetzen standardmäßig machen (nur die ID-Vergleich)
extension MyData : Equatable { }
Aber ich habe diesen schönen Fehler:
"Extension of protocol 'MyData' cannot have an inheritance clause"
Das Verhalten ich suche BananaData entspricht Equatable (einem Protokoll), da es das MyData-Protokoll implementiert, das eine Standardimplementierung von Equalable
bereitstellen kann//This is the method to implement Equatable
func ==(lhs: MyData, rhs: MyData) -> Bool {
return lhs.myDataID == rhs.myDataID
}
struct BananaData: MyData {
var myDataID: Int = 1
}
func checkEquatable(bananaOne: BananaData, bananaTwo: BananaData) {
//This compiles, verifying that BananaData can be compared
if bananaOne == bananaTwo { }
//But BananaData is not convertible to Equatable, which is what I want
let equatableBanana = bananaOne as Equatable
//I don't get the additional operations added to Equatable (!=)
if bananaOne != bananaTwo { } //Error
}
Kleinen Follow-up zu verstehen, hatte ich angenommen, dass wer auch immer umgesetzt 'MyData' muss auch gleichzusetzen explizit implementieren. Z.B. Die Implementierung von Equatable ist eine Voraussetzung für MyData (was ich vermeiden wollte). Die 'BananaData' sind natürlich ein beigesteuertes Beispiel, aber danke für die Warnung. – Kevin