Swift 类中的错误:在 super.init 调用时未初始化属性

Error in Swift class: Property not initialized at super.init call(Swift 类中的错误:在 super.init 调用时未初始化属性)
本文介绍了Swift 类中的错误:在 super.init 调用时未初始化属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个类,ShapeSquare

class Shape {
    var numberOfSides = 0
    var name: String
    init(name:String) {
        self.name = name
    }
    func simpleDescription() -> String {
        return "A shape with (numberOfSides) sides."
    }
}

class Square: Shape {
    var sideLength: Double

    init(sideLength:Double, name:String) {
        super.init(name:name) // Error here
        self.sideLength = sideLength
        numberOfSides = 4
    }
    func area () -> Double {
        return sideLength * sideLength
    }
}

通过上面的实现,我得到了错误:

With the implementation above I get the error:

property 'self.sideLength' not initialized at super.init call
    super.init(name:name)

为什么我必须在调用 super.init 之前设置 self.sideLength?

Why do I have to set self.sideLength before calling super.init?

推荐答案

引自 The Swift Programming Language,它回答了你的问题:

Quote from The Swift Programming Language, which answers your question:

Swift 的编译器会执行四项有用的安全检查,以确保两阶段初始化完成,没有错误:"

"Swift’s compiler performs four helpful safety-checks to make sure that two-phase initialization is completed without error:"

安全检查 1 指定的初始化程序必须确保所有由它的类引入的属性在它之前被初始化委托给一个超类初始化器."

Safety check 1 "A designated initializer must ensure that all of the "properties introduced by its class are initialized before it delegates up to a superclass initializer."

摘自:Apple Inc. Swift 编程语言".电子书.https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11

Excerpt From: Apple Inc. "The Swift Programming Language." iBooks. https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11

这篇关于Swift 类中的错误:在 super.init 调用时未初始化属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

The Google Mobile Ads SDK was initialized without AppMeasurement(Google 移动广告 SDK 在没有 AppMeasurement 的情况下进行了初始化)
No JNI_OnLoad found in ... skipping init(在 ... 中未找到 JNI_OnLoad 正在跳过初始化)
No JNI_OnLoad found skipping init gt; Application shutdown(没有找到跳过初始化的 JNI_OnLoad 应用程序关闭)
Fatal error: use of unimplemented initializer #39;init(coder:)#39; for class(致命错误:对类使用未实现的初始化程序“init(coder:))
Conditional Binding: if let error – Initializer for conditional binding must have Optional type(条件绑定:if let error - 条件绑定的初始化程序必须具有可选类型)
Safe to signal semaphore before deinitialization just in case?(在取消初始化之前发出信号量信号安全吗?以防万一?)