J'aimerais revenir un UIViewController
conforme MyProtocol
à partir d'une méthode, donc je suis en utilisant la signature de la méthode:
func myMethod<T where T : UIViewController, T : MyProtocol>() -> T {
La première chose que je ne comprends pas: si myMethod
retours par exemple, un MyViewController
qui a de la suite de la signature, j'ai à force de voter pour elle:
class MyViewController: UIViewController, MyProtocol
Je ne peux pas simplement return MyViewController()
mais j'ai besoin de le jeter comme ceci: return MyViewController() as! T
- pourquoi est-ce nécessaire?
Et la deuxième chose: comment puis-je utiliser cette méthode quelque part? Je ne peut pas simplement dire
let x = myMethod() as? UIViewController
comme j'ai l'erreur
Generic parameter 'T' could not be inferred
Comment puis-je obtenir quelque chose comme cela? Si je jette - MyViewController
il fonctionne, mais je voudrais éviter que des cours.
EDIT: Exemple
class MyViewController : UIViewController, MyProtocol {
}
protocol MyProtocol {
}
func myMethod<T>() -> T where T : UIViewController, T : MyProtocol {
return MyViewController() as! T // why is the cast necessary?
}
ok, je fais une partie, mais pourquoi le cast T
- elle nécessaire? MyViewController
est une sous-classe de UIViewController
et est conforme au protocole, donc pas de plâtre doivent être nécessaires, à droite?