在Swift中调用可选委托函数的最佳方法是什么?
假设我有以下协议:
@objc protocol SomeDelegate {
optional func someOptionalFunction(sender: AnyObject)
}
我的课程看起来像这样:
class Foo {
var delegate: SomeDelegate! = nil
func someFunction(email: String, password: String) {
self.delegate.someOptionalFunction?(self)
}
}
我应该这样打电话吗?如果没有,最好的做法是什么?
提前致谢。
答案 0 :(得分:2)
该调用中的“?
”位是调用安全的原因,无论是否实现了可选委托。这就是我在自己的代码中所做的一切。
如果你绝对想确定someOptionalFunction
存在,you could always use respondsToSelector
,它存在于每个NSObject
个实例。但这几乎肯定是矫枉过正的。
答案 1 :(得分:1)
someOptionalFunction?(self)
绝对没问题。但...
基本上,对代理人的引用应为weak
和可选。
class Foo {
weak var delegate: SomeDelegate? = nil
// ^^^^ ^
func someFunction(email: String, password: String) {
self.delegate?.someOptionalFunction?(self)
// ^
}
}