在斯威夫特的财产申报期间提到自我

And*_*ree 1 ios swift

我正在尝试使用以下代码声明和初始化属性.

class ClassName: UIViewController {

??private let doneButtonItem = UIBarButtonItem(title: "Done", style:?UIBarButtonItemStyle.Plain, target: self, action: "doneButtonDidTapped")

   func doneButtonDidTapped() {
      println("Ulala!")
   }
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误.

Cannot find an initializer for type 'UIBarButtonItem' that accepts an argument list of type '(title: String, style: UIBarButtonItemStyle, target: ClassName -> () -> ClassName, action: String)'
Run Code Online (Sandbox Code Playgroud)

谁知道这里发生了什么?我是否应该放弃尝试使用声明内联初始化属性并在init()方法上进行初始化?

agy*_*agy 6

正如@giorashc所说,由于swift的两阶段初始化,自我尚未初始化,所以你不能这样做.

但我认为你可以创建一个懒惰的inialization:

lazy private var doneButtonItem : UIBarButtonItem = {
    [unowned self] in
    return UIBarButtonItem(title: "Done", style:UIBarButtonItemStyle.Plain, target: self, action: "doneButtonDidTapped")
    }()
Run Code Online (Sandbox Code Playgroud)