功能类型的属性初始化错误

时间:2015-08-12 21:04:34

标签: swift

我正在学习Swift的过程中,正在努力将回调模式应用于类作为练习并遇到一个我无法通过的问题(构建错误)

override init() {
    super.init()
}

convenience init(picker: UIPickerView) {
    self.init()
    picker.delegate = self
    picker.dataSource = self
}

var _selectedCallback:  (String) -> Void        

func onItemSelected(callback: (String) -> Void) {
    self._selectedCallback = callback
}

上面的代码段会在super.init()上发生编译错误,并显示错误消息

  

" Property' self._selectedCallback'没有在super.init call"

初始化

现在,我知道所有局部变量都必须赋值给它们;但是,如何初始化_selectedCallback的函数类型?我见过的例子如下:

var _selectedCallback:  (String) -> Void = test

func test(message: String { }

上面的代码片段返回

的编译错误
  

"'字符串'不是"

的子类型

我觉得我错过了一些简单的东西,我却无法找到它。那个或我做错了,需要找到一个更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:4)

你可以给它一个默认值,如下所示:

var _selectedCallback: (String) -> Void = { _ in return }

或者,您可以将其设置为默认设置为nil的可选项,并稍后进行设置:

var _selectedCallback: ((String) -> Void)?

我通常更喜欢第二个选项,因为Optional s旨在表示可能实际上没有值的可能性,这就是您所处的情况。