请教一个 Swift 构造器 XCode 编译报错的问题

2023-02-11 19:59:33 +08:00
 EVPATOR

在 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: "")
997 次点击
所在节点    Swift
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/915226

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX