假设我在Swift上有以下课程(有明显的问题)

class MyClass {
    let myProperty: String

    init() {
        super.init()
        self.setupMyProperty()
    }

    func setupMyProperty() {
        myProperty = "x"
    }
}

这过于简化了,但我基本上是在try 将myProperty的初始化委托给setupMyProperty()方法.我经常使用这种模式来分解一个类设置的不同部分.

但是当然,在超级初始化器运行之前,我不能调用self,在所有属性都设置好之前,我也不能运行超级初始化器,所以我陷入了困境.最重要的是,由于setupMyProperty()不被视为初始值设定项,它将无法分配myProperty.

谁能告诉我如何在Swift中实现这种模式?

推荐答案

将其声明为隐式展开的可选项

class MyClass : NSObject {
    var myProperty: String!

    init() {
        super.init()
        self.setupMyProperty()
    }

    func setupMyProperty() {
        self.myProperty = "x"
    }
}

《Swift编程语言》手册第499页

Swift相关问答推荐

纹理资源加载问题(图像解码失败)

如何访问用户选定目录下的(只读)文件?

无法创建MKAssociateRegion对象

当将新值推送到 NavigationStack 时,SwiftUI 的 navigationDestination 已在堆栈的早期声明

如何在visionOS中将模型锚定在用户头部上方?

macOS SwiftUI: 如何触发删除一个项目?

为什么无法在 Swift 中使用AVFoundation扫描 QRCode

为什么 UITapGestureRecognizer 对于 Swift 集合视图中的单元格图像无法正常工作?

带有可选字符串作为键路径的 SwiftUI iOS16 表

是否有一个带有空初始值设定项的 Swift 类/ struct 的标准协议

UIButton 配置不更新按钮标题

将基于MyProtocol的泛型函数的参数更改为使用存在的any MyProtocol或some MyProtocol是否会受到惩罚?

将内容与工作表顶部而不是中间对齐

Swift Swiftui - 将 colored颜色 保存到 UserDefaults 并从 @AppStorage 使用它

Alamofire:如何全局处理错误

在 Swift 中子类化 NSObject - 初始化器的最佳实践

iOS 视图可见性消失了

Swift performSegueWithIdentifier 不起作用

枚举大小写的原始值必须是文字

通过单击表格视图中的单元格打开新的视图控制器 - Swift iOS