Swift 4.1, Xcode 9.3 syntaxe:
protocol FilterViewControllerDelegate: AnyObject {
func didSearch(Parameters:[String: String]?)
}
ce protocole peut être adopté que par les classes.
Pour répondre à votre première question -
Mais quelle est la différence lors de l'utilisation:
la différence de celle-ci:
protocol FilterViewControllerDelegate {
func didSearch(Parameters:[String: String]?)
}
c'est que ce protocole peut adopter des types de valeur, tels les énumérations et les structures ainsi.
Pour répondre à votre deuxième question -
Et quand dois-je utiliser un : classe de protocole?
lorsque vous devez utiliser la classe de protocole, je voudrais décrire suivant l'exemple de modèle de délégué:
Imaginez que vous avez délégué protocole.
protocol PopupDelegate: AnyObject {
func popupValueSelected(value: String)
}
et dans une autre catégorie que vous voulez pour créer une propriété
var delegate: PopupDelegate?
Mais cela a une forte référence qui pourrait vous amener à des problèmes avec des fuites de mémoire. Une façon de réparer fuite de mémoire est à rendre délégué de la propriété - faible. Jusqu'à ce que nous ne ferons pas notre seul protocole disponible à appliquer pour les classes, Swift pense que l'on pourrait appliquer notre protocole de types de valeur.
weak var delegate: PopupDelegate?
Si vous essayez de déclarer votre délégué comme faible, vous verrez erreur suivante:
"faible" var uniquement être appliquée à la classe et de classe lié aux types de protocole,
pas 'PopupDelegate'
Mais nous ne pouvons pas appliquer faible pour les types de valeur. Nous avons donc besoin de restreindre notre protocole à un type de référence, de sorte swift sait que c'est un type de référence.
Pour vous rendre disponible pour déclarer ce délégué faible, vous devez restreindre votre protocole pour être utilisé par les classes seulement:
protocol PopupDelegate: AnyObject {
func popupValueSelected(value: String)
}