L'héritage de la non-protocole, non-Type de classe
Je veux une extension sur un Tableau où vous pouvez trouver un élément qui est d'un certain type.
J'ai essayé comme ceci:
func findItem<U: Type>(itemToFind: U) -> AnyObject? {
for item in self {
if let obj = item as? itemToFind {
return obj
}
}
return nil
}
J'ai donc vérifier si c'est le même type et puis je veux le retour de l'obj.
L'erreur que j'obtiens est:
Héritage de non-protocole, non-classe "Type".
Comment puis-je résoudre ce que je peux passer à la fonction ViewController.self
et que je serai de retour nul si on ne trouve pas ou le viewcontroller qui est dans le tableau?
- Qu'est-ce que
Type
? - J'ai pensé que je pouvais l'utiliser parce que l'Objet.dynamicType donne le type? Ou n'est-ce pas possible?
Vous devez vous connecter pour publier un commentaire.
La syntaxe
<U: Type>
dans ce contexte signifie que vous êtes à la déclaration d'un nouveau générique de l'espace réservéU
dans votre signature de fonction, qui hérite de l' (dans le cas des classes), ou est conforme à (dans le cas de protocoles)Type
.Comme
Type
est ni protocole, ni de classe, je suppose que ce que vous voulez vraiment est une contrainte générique de l'espace réservé, et, au contraire, veulent passer à un type donné comme argument à la fonction, qui va définir le type deU
.Dans ce cas, vous aurez envie d'utiliser le metatype
U.Type
que l'entrée de la fonction type (ainsi queU?
pour le type de retour de fonction – en tant que le type de retour sera le type facultatif quel que soit le type que vous passez à la fonction). Par exemple:Comme une note de côté, cela pourrait être légèrement simplifié par l'utilisation de le pattern matching dans le
for
boucle:utilisation
is
à la place.