V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
EVPATOR
V2EX  ›  Swift

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

  •  
  •   EVPATOR · 2023-02-11 19:59:33 +08:00 · 982 次点击
    这是一个创建于 441 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 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: "")
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   879 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:24 · PVG 05:24 · LAX 14:24 · JFK 17:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.