首页 > 解决方案 > 在 SwiftUI 视图中初始化惰性变量

问题描述

我在视图中有一个委托,该委托取决于初始化视图时输入的数据。fileFormat应该传递给这个委托。

我尝试使用惰性变量(以防止未初始化的自我错误),但是由于惰性变量在第一次调用时会发生变异,因此这是行不通的:

struct EditorView: View {

    let fileFormat: UTIType
    @Binding var text: String

    lazy var highlightDelegate = HighlightDelegate(format: fileFormat)

    // something that uses `highlightDelegate`:
    // Cannot use mutating getter on immutable value: 'self' is immutable
}

如果我使用计算属性,highlightDelegate则每次调用它时都会对其进行初始化,这并不是我所需要的——每个视图都应该初始化这些结构之一。

标签: swiftswiftui

解决方案


您可以highlightDelegate在视图的 init 中进行初始化,无需使其变得懒惰。

struct EditorView: View {

    let fileFormat: UTIType
    @Binding var text: String

    let highlightDelegate: HighlightDelegate

    init(fileFormat: UTIType, text: Binding<String>) {
        self.fileFormat = fileFormat
        self._text = text
        self.highlightDelegate = HighlightDelegate(format: fileFormat)
    }

    ...
}

推荐阅读