2

我可以在 Swift UI Struct 中拥有的最大状态变量数是多少?

struct Example: View {

    @State var first : Bool = true
    @State var second: Double = 94.4
    @State var third: CGFloat = 45.45
        .
        .
        .
     How many maximum ?

    var body: some View {
        Text("Hello ")
    }

}

另外,有很多状态变量真的会减慢应用程序的速度吗?我需要弄清楚这件事的可扩展性,因为我是声明式编程的新手:P

4

3 回答 3

3

只是为了让你开始回答,

  1. 很难相信存在任何性能问题。“声明式编程”实际上并不存在。它只是一个编译器/运行时/任何做一些检查的东西。与管道中的其他结构没有真正实质性的范式差异。

令人难以置信的是,如果你在做真正的性能编程,也许是科学的或游戏之类的,你在一百万年内永远不会参与这样的事情,所以它没有任何意义。

此外,与手机上的 UI 相关的任何东西都使用了惊人的处理能力,这毫无价值。渲染任何一个文本字符!当时恰好出现在屏幕上,是样条曲线抖动、blitting 等令人惊叹的舞蹈。诸如“运行时系统完成的检查”之类的问题实际上是无关紧要的,除非在非常不寻常的情况下。

摘要:不考虑这种环境下的性能。

  1. 你能有几个?如果你粘贴几千,它工作正常。很难相信有任何限制。

摘要:您可能正在考虑像“30”这样的限制。没有任何限制

(可能有一些技术性的、神秘的限制——比如 6400 万——但这与你在做什么完全无关!)


管理总结:放松和享受,这些都不是问题。


有关特定案例的更多信息

我正在尝试制作动画,我正在使用 withAnimation 在环中显示百分比进度

对于所描述的状态变量的数量(例如,小于 100,000 - 您使用的是大约“20”),检查的额外开销是完全无关的。它是如此之低,你无法测量它。

TBC 这可能不是最优雅的方法,但是,关于所提出的具体性能问题,这绝对不是问题。享受!

于 2020-03-07T16:19:37.217 回答
1

不确定这是否是一个错误,但我已经达到了 SwiftUI 的极限,一个应用程序在 1 个屏幕上有 85 个 @State 变量。此外,我在组内组内有很多堆叠组。我正处于如果我添加任何 1 行代码的阶段,编译器会抱怨我正在编写的不是视图。

因此,根据您的计算机编译视图的速度,会有一个限制。编译器有一定的时间允许尝试编译,直到它突然停止。

于 2021-02-19T10:37:35.873 回答
0

我遇到了同样的问题,当我尝试再添加一个状态时,它无法编译:

(372, 10) The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions

但是当删除任何状态并使用新的状态时,它会起作用。所以绝对有极限!!!另一个问题是如何解决它。

于 2021-04-12T08:21:09.087 回答