在Swift中调用可选委托函数的最佳方法是什么

时间:2014-11-25 09:36:26

标签: ios swift optional

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

}

我应该这样打电话吗?如果没有,最好的做法是什么?

提前致谢。

2 个答案:

答案 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)
//                   ^
    }
}