检查可选的多参数委托方法

时间:2016-08-27 19:08:35

标签: ios swift objc-protocol

纽威到斯威夫特。如果(a)设置了委托并且(b)实现了该方法,那么在如何获得调用可选委托方法的最简洁/惯用语法的情况下苦苦挣扎。

我知道?可以扮演这个角色(例如self.delegate.foo?())但是我在尝试调用具有多个参数的ObjC委托方法并且还返回一个值时阻止了语法正确(Bool)我关心捕获(我想区分"方法未实现""方法实现并返回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
        }
    }
}

1 个答案:

答案 0 :(得分:5)

此代码适用于选项。这就是你需要写的全部内容。

delegate?.myThing?(self, argTwo: foo, argThree: bar)

此代码应处理您尝试检查的所有情况,例如:

if let result = delegate?.myThing?(self, argTwo: foo, argThree: bar) {
     // "result" is the Bool returned from the method
}

如果输入比它意味着您的方法存在并且设置了委托。唯一可能出现的问题是您的方法是否返回可选的Bool?(或任何可选)类型。您可以确定您的逻辑是否正确,并且需要使用您在问题中执行的某种检查。仍然在大多数情况下,不必知道这种方法是否存在,如果存在则只调用它,如果不存在则不调用,我的代码将处理它。