Mise à jour (Beta 5) : Xcode / Swift Beta 5 a changé la façon de déclarer l'exigence de classe pour un protocole. Au lieu d'utiliser @class_protocol
vous devez maintenant déclarer le type du protocole comme étant class
.
Avec la nouvelle syntaxe, l'exemple de code que j'ai posté avec la réponse originale serait le suivant :
protocol ProtocolNameDelegate: class {
// Protocol stuff goes here
}
class SomeClass {
weak var delegate: ProtocolNameDelegate?
}
L'idée est la même, mais la syntaxe est peut-être un peu plus propre.
Réponse originale (valable jusqu'à la bêta 5) :
Je pense que la manière correcte d'implémenter le modèle de délégué est de marquer votre protocole avec l'attribut class_protocol
Extrait du livre sur le langage de programmation Swift :
"classe_protocole Appliquez cet attribut à un protocole pour indiquer que le protocole ne peut être adopté que par des types de classe. Si vous appliquez l'attribut objc à un protocole, l'attribut class_protocol est implicitement appliqué à ce protocole ; il n'est pas nécessaire de marquer explicitement le protocole avec l'attribut class_protocol."
Si j'ai bien compris, en utilisant cet attribut, vous garantissez que ce protocole sera utilisé uniquement sur les classes et pas sur d'autres choses comme les enums ou les structs. De plus, vous pouvez voir que l'attribut objc implique l'attribut class_protocol, c'est pourquoi il fonctionne lorsque vous l'utilisez.
Pour mettre un exemple de code :
@class_protocol protocol ProtocolNameDelegate {
// Protocol stuff goes here
}
class SomeClass {
weak var delegate: ProtocolNameDelegate?
}
0 votes
Notez bien ... stackoverflow.com/a/60837041/294884