创build一个可选块作为variables

我有一个简单的类,我声明一个块作为一个variables:

class MyObject : NSObject { var progressBlock:(progress:Double) -> ()? init() { } } 

据我所知,如果这样定义, progressBlock不必在init()初始化器中初始化

但是,当我尝试编译时,我得到他的错误:

 Property 'self.progressBlock' not initialized at super.init 

所以问题是,我如何创build一个可选的progressBlock ,所以我没有得到这个错误?

编写它的方式,编译器假定progressBlock是一个闭包,它返回一个可选的空元组,而不是返回一个空元组的可选闭包。 尝试像这样写:

 class MyObject:NSObject { var progressBlock:((progress:Double) -> ())? init() { progressBlock = nil progressBlock = { (Double) -> () in /* code */ } } } 

加上connor的回复。 可选块可以写成:

 var block : (() -> ())? = nil 

或者作为一个明确的Optional

 var block : Optional<() -> ()> = nil 

或者更好的是,自定义types

 typealias BlockType = () -> () var block : BlockType? = nil