J'écris un protocole qui a un label readOnly. Je veux l'étendre et lui donner une implémentation par défaut où le type conforme est UITextView
.Comment puis-je étendre le protocole avec un ensemble privé?
code:
protocol CountingView {
var keyboardLabel : UILabel {get}
}
extension CountingView where Self : UITextView {
var keyboardLabel : UILabel {
get {
let label = UILabel()
label.textColor = UIColor.white
label.translatesAutoresizingMaskIntoConstraints = false
return label
}
private (set) {
keyboardLabel = newValue
}
}
}
Cependant quand j'ajoute le private
avant la set
je reçois l'erreur suivante.
attendu 'get', 'set', 'willSet', ou un mot clé 'didSet' pour commencer une définition accesseur
Je levais les yeux questions avec cette erreur mais n'a pas trouvé les liés au mien.
Extensions * * ne peut pas ajouter des propriétés stockées. Votre setter s'appellera récursivement. Comparez https://stackoverflow.com/questions/44063181/protocol-extension-in-swift-3. –
@MartinR ummm. D'ACCORD. Vous voulez dire que les réponses sont incorrectes? – Honey
Eh bien, votre * question * est de savoir comment faire une compilation 'private (set)' *. * Les réponses semblent correctes. Mon point est que même si vous le faites compiler, votre * implémentation * du setter «keyboardLabel = newValue» ne fonctionnera pas comme prévu. –