我可以在 Swift UI 结构中拥有的状态变量的最大数量是多少?性能会随着变量的增加而降低吗?

What is the maximum number of state variables I can have in a Swift UI Struct and will the performance slow down with increase in variables?

我在 Swift UI 结构中最多可以拥有多少个状态变量?

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

只是为了让您开始回答,

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

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

此外,在您的 phone 上与 UI 相关的任何事情都毫无价值,使用了惊人的处理能力。渲染 任何一个文本字符! 恰好在当时出现在屏幕上,是样条曲线抖动、blitting 等的惊人舞蹈。 Issue例如 "checking done by the runtime system" 真的无关紧要,除非在非常不寻常的情况下。

总结:不考虑在这个环境下的表现。

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

总结:您可能会想到像“30”这样的限制。 没有这样的限制

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


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


有关特定案例的更多信息

I am trying to animate, i am using withAnimation to display percentage progress in a ring

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

待定,这可能不是最优雅的方法,但是,关于提出的特定性能问题,这绝对是一个非问题。享受吧!

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

因此存在一个限制,具体取决于您的计算机编译视图的速度。 编译器有一定的时间允许尝试编译,直到它突然停止。

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

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

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