【问题标题】:Order of setting variables and super.init in init, both give errorsinit中设置变量的顺序和super.init,都报错
【发布时间】:2019-12-27 04:50:07
【问题描述】:

我有以下代码:

class EditorWindow: NSWindow {
    @Binding var keycode : Int

    override func keyDown(with event : NSEvent) {
        super.keyDown(with: event)
        Swift.print("Caught a key down: \(event.keyCode)!")
    }

    init(keycode : Int){
        self.keycode = keycode
        super.init(contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
                   styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
                   backing: .buffered, defer: false)
    }
}

将 self.keycode = keycode 放在 super.init 之前会给我错误“'self' used in property access 'keycode' before 'super.init' call”,(如this question,建议交换命令)。如果我交换订单,我会收到错误消息:“在 super.init 调用时未初始化属性'self.keycode'”(如this question 中建议使用原始订单作为解决方案) - 它似乎无论我使用哪种顺序都会出错 - 我该如何解决?

【问题讨论】:

  • keycode 是干什么用的?
  • 先调用super.init,看看是否将keykode设置为weak (weak var keykode: Int) 修复它。
  • 你为什么需要@Binding

标签: swift macos appkit


【解决方案1】:

您需要将Binding<Int> 传递给构造函数:

    init(keycode : Binding<Int>){
        self._keycode = keycode
        super.init( // .....
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多