Ben*_*tto 4 ios objc-protocol swift
对斯威夫特来说很新.如果(a)设置委托并且(b)实现该方法,那么如何获得调用可选委托方法的最简洁/惯用语法则苦苦挣扎.
我知道?可以扮演这个角色(例如self.delegate.foo?()),但我越来越陷入困境时试图调用具有多个参数的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
}
}
}
Run Code Online (Sandbox Code Playgroud)
此代码应该适用于选项.这就是你需要写的全部内容.
delegate?.myThing?(self, argTwo: foo, argThree: bar)
Run Code Online (Sandbox Code Playgroud)
此代码应处理您尝试检查的所有情况,例如:
if let result = delegate?.myThing?(self, argTwo: foo, argThree: bar) {
// "result" is the Bool returned from the method
}
Run Code Online (Sandbox Code Playgroud)
如果输入比它意味着您的方法存在并且设置了委托.唯一可能出现的问题是您的方法是否返回可选Bool?(或任何可选)类型.你不能确定你的逻辑是否正确,你需要使用你在问题中执行的某种检查.仍然在大多数情况下,不必知道这种方法是否存在,如果它存在则只调用它,如果不存在则不调用,我的代码将处理它.
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |