In Swift 1.1 siamo stati in grado di avere codice come sotto compilato e lavorare dove abbiamo esposto le proprietà Objective-C esistenti attraverso un protocollo aggiunto da un'estensione. Ne abbiamo anche alcuni in cui la proprietà viene gestita dall'estensione.Come esporre la proprietà esistente sulla classe Obj-C usando un protocollo di estensione in Swift
@objc protocol Enableable: class {
var enabled: Bool { get set }
}
let DisabledAlpha: CGFloat = 0.5
let EnabledAlpha: CGFloat = 1.0
extension UIButton: Enableable {}
extension UIImageView: Enableable {
var enabled: Bool {
get {
return alpha > DisabledAlpha
}
set(enabled) {
alpha = enabled ? EnabledAlpha : DisabledAlpha
}
}
}
Quando si cerca di compilare il codice utilizzando XCode 6.3 e Swift 1.2, otteniamo l'errore Type 'UIButton' does not conform to the protocol 'Enableable'
seguente. L'estensione UIImageView sembra compilare bene.
Esiste un modo per esporre questo tipo di proprietà esistenti da un tipo Objective-C o dobbiamo implementare una proprietà proxy con un nome diverso?
Grazie per la risposta. Mi chiedevo se fosse dovuto alla firma ma non ero sicuro di cosa fare al riguardo. Non abbiamo mai visto il protocollo '@ objc Enableable: classe { var abilitato: Bool {@objc (isEnabled) get set} }' –