在 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: "")
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.