在 XCode 14.2 上,类 AWindow 编译成功,但运行时出错,类 BWindow 直接编译报错。实在没想明白为什么把属性 let 改成 var 会导致编译结果不一样,从 swift 语法来讲两个应该都会编译错误吧?
import AppKit
// NSWindow 应该只有 initWithContentRect:styleMask:backing:defer: 这一个指定构造器
// 以下两个类的 init(name:)都是不正确写法
class AWindow: NSWindow {
let name: String
init(name: String) {
self.name = name
super.init() // 运行时错误:Use of unimplemented initializer 'init(contentRect:styleMask:backing:defer:)' for class 'LearnSwift.AWindow'
}
}
_ = AWindow(name: "")
class BWindow: NSWindow {
var name: String
init(name: String) {
self.name = name
super.init() // 编译错误:Must call a designated initializer of the superclass 'NSWindow'
}
}
_ = BWindow(name: "")