swift - 在 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
则每次调用它时都会对其进行初始化,这并不是我所需要的——每个视图都应该初始化这些结构之一。
解决方案
您可以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)
}
...
}
推荐阅读
- eventbrite - Eventbrite 事件 API 现在返回 404
- python - Tkinter 框架使用 create_window 选项等效于展开
- javascript - 在不更改配置的情况下获取过去的 import/no-named-as-default lint 错误
- sql - 如何用 0 填充 null 并使用 spark `pivot` 累积`count`?
- java - 如何使用 volley 将 FCM 通知从一台设备发送到多台设备(订阅主题)
- android - MotionLayout 中的浮动操作按钮(FAB),.show() 不起作用,.hide() 工作不正确
- css - 是否可以在 Vue.js 的不同“页面”上设置不同的菜单样式?
- matlab - 您如何交叉关联音频文件以查看样本是否与原始文件匹配?
- sql-server - VB Net - SQL - 比较文本框的值和 SQL 值
- mysql - 列的页面溢出(InnoDB)如何在 MySQL 中工作?