【问题标题】:Why SwiftUI Limited `@ViewBuilder` parameters count to 10?为什么 SwiftUI Limited `@ViewBuilder` 参数计数为 10?
【发布时间】:2021-03-03 17:35:19
【问题描述】:
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
extension ViewBuilder {

    public static func buildBlock<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6, _ c7: C7, _ c8: C8, _ c9: C9) -> TupleView<(C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)> where C0 : View, C1 : View, C2 : View, C3 : View, C4 : View, C5 : View, C6 : View, C7 : View, C8 : View, C9 : View
}

在源代码中,ViewBuilder 最大参数限制为 10 个。

【问题讨论】:

  • 假设他们将其增加到 11,您会问“他们为什么将其限制为 11?”你不会吗?当您有超过十个视图时,您应该考虑将其中的一些提取为单独的视图。
  • 是的......如果你想要超过 10 个,那么你可以在 VStack 或 HStack 中使用 Group
  • 即使在一个构建器中有 10 个视图,代码也会变得非常复杂,编译器经常会拒绝它,所以通常,作为一种好的做法,我们使用更少的子视图。您拥有的视图越小,它们的编译速度就越快(并且通常编译)。所以我会说 ViewBuilder 中的 10 个视图绰绰有余。

标签: swift swiftui


【解决方案1】:

很遗憾variadic generics are not yet supported,因此无法使用可变输入参数声明此函数(这意味着您可以传入任意数量的输入参数)。

很可能 10 个似乎是一个很好的经验法则,因为如果您需要更多子视图,您可以随时将视图构建器分解为几个较小的函数。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 2020-12-28
  • 1970-01-01
相关资源
最近更新 更多