Posso aggiungere la conformità del protocollo a un protocollo tramite un'estensione rapida?Swift 2 aggiunge la conformità del protocollo ai protocolli
//Plain old protocol here
protocol MyData {
var myDataID: Int { get }
}
Voglio fare il protocollo MyData
equatable di default (basta confrontare l'ID)
extension MyData : Equatable { }
ma ottengo questo incantevole errore:
"Extension of protocol 'MyData' cannot have an inheritance clause"
Il comportamento che sto cercando è BananaData conforme a Equatable (un protocollo) perché implementa il protocollo MyData che può fornire un'implementazione predefinita di Equitable
//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
}
Piccolo follow-up, ho dato per scontato che chi implementato 'MyData' deve anche implementare in modo esplicito equatable. Per esempio. Implementare Equitable è un requisito per MyData (che è quello che volevo evitare). Il 'BananaData' è ovviamente un esempio fornito, ma grazie per l'avvertimento. – Kevin