0
votes

Swift qui passe deux délégués par condition

Actuellement, je convertitons le code Obj-C en Swift.

Configuration: strong> p>

protocole A fort>
Func méthodra () p>

protocole B fort>
FUNC MOTEBOB P>

CLASSE C FORT> P>

func passing() {
    if deleagteA?.methodA?() {}
    else if delegateB?.methodB?() {}
}


0 commentaires

3 Réponses :


-1
votes

Il s'avère ?? Nil-Coalecing L'opérateur est la solution pour ce cas.
Délégatea? .methoda () ?? Déléguéb? .Methodb ()


1 commentaires

Vérification de nil fonctionnerait également pour des méthodes facultatives autant que je sache.



1
votes

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. XXX PRE>

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?()


0 commentaires

0
votes

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()
        }
    }
}


1 commentaires

Pas beaucoup plus si vous utilisez un tas de ? s. ((délégué comme? A) ?. Méthyata ?? (Délégué comme? B)? Modyb)? ()