Ios 创建可选块作为变量

Ios 创建可选块作为变量,ios,swift,objective-c-blocks,optional,Ios,Swift,Objective C Blocks,Optional,我有一个简单的类,其中我将块声明为变量: class MyObject : NSObject { var progressBlock:(progress:Double) -> ()? init() { } } 据我所知,如果以这种方式定义,progressBlock不必在init()初始值设定项中初始化 然而,当我试图编译时,我得到了他的错误: Property 'self.progressBlock' not initialized at super.init 所

我有一个简单的类,其中我将块声明为变量:

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

    init() { }
}
据我所知,如果以这种方式定义,
progressBlock
不必在
init()
初始值设定项中初始化

然而,当我试图编译时,我得到了他的错误:

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

所以问题是,如何创建可选的
progressBlock
,这样我就不会出现这个错误?

按照您编写它的方式,编译器假设progressBlock是一个返回可选空元组的闭包,而不是返回空元组的可选闭包。试着这样写:

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

康纳的回答补充道。可选块可以写为:

var block : (() -> ())? = nil
或作为显式
可选

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

您可以为块创建可选的var,但必须将其值设置为
nil
。我现在执行这个“var progressBlock:((progress:Double)->())?”并且它可以工作。谢谢,是的。需要将该块作为可选块吗
typealias BlockType = () -> ()

var block : BlockType? = nil