在 iOS Widgets 中,是不是必须将只读数据标记为 @State?

Posted

技术标签:

【中文标题】在 iOS Widgets 中,是不是必须将只读数据标记为 @State?【英文标题】:In iOS Widgets, do you have to mark read-only data as @State?在 iOS Widgets 中,是否必须将只读数据标记为 @State? 【发布时间】:2021-11-04 12:35:19 【问题描述】:

通常在 SwiftUI 中,视图拥有并用于渲染它的数据保存在一个用 @State 属性包装器标记的私有属性中。这告诉系统跟踪对该属性的更改,以便知道何时更新视图。

但是...如果该数据永远不会改变,因此被标记为 let 并通过初始化程序设置,您还需要 @State 属性吗?

此外,由于 WidgetKit 的视图在设计上都是不可变的(更不用说在系统拥有的完全独立/隔离的进程中运行),是否有曾经使用任何与状态相关的情况专门用于小部件的视图的修饰符?

【问题讨论】:

【参考方案1】:

如果你的属性永远不会改变,只需在不使用@State 的情况下声明它并使用'let'。您可以在创建视图时在初始化时将其值作为参数传递。

【讨论】:

是的,这就是我们目前正在做的事情,但是我们在小部件中遇到了布局问题。具体来说,我们有一个显示三个项目的 HStack,由后端确定。因此,相同的项目可能会再次出现,但位置不同。此外,由于换行和该文本的长度,有些项目显示一行文本,而其他项目显示两行,并且它是底部对齐的。我们看到的是文本没有正确更新,因此单行/两行的内容没有正确布局,导致布局问题。

以上是关于在 iOS Widgets 中,是不是必须将只读数据标记为 @State?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin-ios Widgets无法加载

elasticsearch之解除索引只读问题filtersort解除索引最大查询数的限制reindex迁移数据boost条件权重控制

为啥在js取消设置只读标签后iOS不显示键盘输入?

这10个每个开发者都必须知道的Widgets

Swift 中的惰性只读属性

使用ARC为ios声明只读属性的正确方法是啥