Swift中如何初始化非可选类型的函数类型变量?
非可选类型函数变量的初始化方法
以下是网络代码里常见的变量定义:
private var callback: ((_ blah: String?) -> ())
这段代码没法通过编译,因为缺少初始化器。改成可选类型就很简单:
private var callback: ((_ blah: String?) -> ())?
对应的初始化写法是:
private var callback: ((_ blah: String?) -> ())? = nil
但如果是非可选类型的函数变量,比如下面这样,该怎么初始化?
private var callback: ((_ blah: String?) -> ())
我试过类似这样的写法,但始终无法成功:
private var callback: ((_ blah: String?) -> ()) = ( (_ String?){ return }() )
正确初始化方案
直接给变量赋值一个符合签名的空闭包实现即可:
private var callback: ((_ blah: String?) -> ()) = { _ in }
如果需要更清晰地显式声明参数类型,也可以写成:
private var callback: ((_ blah: String?) -> ()) = { (blah: String?) in }
这种方式满足了非可选类型必须初始化的要求,后续依然能在其他方法里重新给它赋值(比如你补充场景里的callback = onMain操作)。
私有回调的常见使用场景
回调函数设为私有常见的使用场景示例:
class SomeWorker { public func someLong(networkThing: String, onMain: @escaping (_ foundIt: Blah?) -> () ) { callback = onMain loopForALongTimeDoingStuff( ... ) } private var callback: ((_ foundIt: Blah?) -> ()) = { _ in } }
内容的提问来源于stack exchange,提问作者Fattie
相关产品推荐
相关产品推荐

