【问题标题】:Create an optional block as a variable创建一个可选块作为变量
【发布时间】:2014-07-28 21:31:46
【问题描述】:

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

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

    init() { }
}

据我了解,如果这样定义,progressBlock 不必在 init() 初始化程序中初始化

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

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

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

【问题讨论】:

  • 你可以为块创建可选的var,但你必须将它的值设置为nil

标签: ios swift objective-c-blocks optional


【解决方案1】:

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

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

【讨论】:

  • 我现在这样做“var progressBlock:((progress:Double) -> ())?”它有效。谢谢
  • 是的。需要该块是可选的
【解决方案2】:

添加到康纳的回复中。可选块可以写成:

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

或作为明确的Optional

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

或者更好的是,使用自定义类型

typealias BlockType = () -> ()

var block : BlockType? = nil

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多