4

Newish から Swift へ。(a) デリゲートが設定されていて、(b) メソッドが実装されている場合に、オプションのデリゲート メソッドを呼び出すための最も簡潔で慣用的な構文を取得する方法に苦労しています。

?がこの役割を果たせることはわかっていますが (例: self.delegate.foo?())、複数の引数を持ち、キャプチャしたい値 (Bool) を返す ObjC デリゲート メソッドを呼び出そうとすると、構文を正しく取得するのが難しくなります (そして、 「メソッドが実装されていません」および「メソッドが実装され、false が返されました」)。

例を次に示します。この場合、MyDelegateProtocolオプションのメソッドがあります-myThing:argTwo:argThree:(Bool を返します)。

このスニペットはセマンティクスを正しくしているように見えますが、使用してrespondsToSelectorおり、非常におしゃべりです。より慣用的な方法で改善できますか?

if let delegate = self.delegate {
    if delegate.respondsToSelector(#selector(MyDelegateProtocol.myThing(_:argTwo:argThree:))) {
        if delegate.myThing!(self, argTwo: foo, argThree: bar) {
            // do something
        }
    }
}
4

1 に答える 1