Actuellement, je convertitons le code Obj-C en Swift.
protocole A fort> protocole B fort>
Func méthodra () p>
FUNC MOTEBOB P> func passing() {
if deleagteA?.methodA?() {}
else if delegateB?.methodB?() {}
}
3 Réponses :
Il s'avère ?? code> Nil-Coalecing L'opérateur est la solution pour ce cas.
Délégatea? .methoda () ?? Déléguéb? .Methodb () Code> P>
Vérification de nil code> fonctionnerait également pour des méthodes facultatives autant que je sache.
D'après ce que vous avez posté, il n'est pas clair si vos méthodes de protocole sont facultatives ou non. Cela fonctionnera de toute façon. et si vous en avez beaucoup d'entre eux, vous pouvez les mettre dans un tableau. P> [delegateA?.methodA, delegateB?.methodB, delegateA?.methodA, delegateB?.methodB]
.compactMap { $0 }
.first?()
Si vous souhaitez avoir une solution plus similaire à l'ancien avec une seule propriété de déléguée, vous pouvez faire comme ça
class C {
var delegate: Any?
func passing() {
if let delegate = self.delegate as? A {
delegate.methodA()
} else if let delegate = self.delegate as? B {
delegate.methodB()
}
}
}
Pas beaucoup plus si vous utilisez un tas de ? Code> s. ((délégué comme? A) ?. Méthyata ?? (Délégué comme? B)? Modyb)? () Code>