在Cocoa应用程序中正确调用苹果Swift 5子类中的init函数。

问题描述 投票:0回答:1

我不知道在一个叫做HyperlinkTextField的子类中调用NSTextField的init函数的正确格式。

class HyperlinkTextField: NSTextField {
    var url: String = ""

    override func mouseDown(with event: NSEvent) {
        NSWorkspace.shared.open(URL(string: url)!)
    }

    required init?(coder: NSCoder) {  
        super.init(coder: coder)  
        isBezeled = false
    }  

    init(string: String) {
        super.init(string: string) // error: must call a designated initializer of the superclass 'NSTextField'
        isBezeled = false
    }
}
swift cocoa subclass
1个回答
2
投票

所有继承自 NSControl 有两个指定的初始化器

  1. init?(coder: NSCoder)
  2. init(frame: NSRect)

所以你一定要叫后者

init(string: String) {
    super.init(frame: .zero)
    self.stringValue = string
    isBezeled = false
}
© www.soinside.com 2019 - 2024. All rights reserved.