ios - 继承初始化类中的Swift错误

标签 ios swift class inheritance

当我不想初始化我的 B 对象时出现错误。

我的错误是:在 super.init 初始化 self 之前在属性访问“name”中使用“self”

class A {
    let name = "myName";
}

class B:A {
    let point: ObjectWithName;

    init() {
        self.point = ObjectWithName(name); // error here
        super.init();
    }
}

感谢您的帮助!

最佳答案

问题是您正在访问在父类(super class)中声明的 name。但是父类(super class)还没有被初始化(它将在 super.init() 之后)。

所以这是一个逻辑问题。

解决方案#1

您可以将point声明为lazy,这样它将在之后整个init进程执行已经完成,除非你之前调用它。

struct ObjectWithName {
    let name: String
}

class A {
    let name = "myName";
}

class B: A {
    lazy var point: ObjectWithName = { ObjectWithName(name:self.name) }()
}

解决方案#2

A 中,您可以将 name 定义为 static

class A {
    static let name = "myName";
}

class B:A {
    let point: ObjectWithName;

    override init() {
        self.point = ObjectWithName(name: B.name)
        super.init();
    }
}

关于ios - 继承初始化类中的Swift错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38623989/

相关文章:

html - iOS 浏览器 : Anchors within a fixed positioned element only work once

ios - Apple 允许的推送通知的最大允许数量

ios - 更改窗口 rootViewController 后出现 UITabBarController

c++ - Sprite 不会在 SFML 中移动

ios - 共享时用于接收 iOS Notes 内容的应用程序间通信 Hook /API 是什么? (截屏)

ios - objc_msgSend [__NSArrayM dealloc] 崩溃报告有时来自 Crashlytics

php - PHP 中的继承——创建子实例并调用父方法

arrays - 如何在swift代码中保存一组类

快速评级系统循环和分配

swift - 快速显示动态范围的循环