从 Swift 中的闭包返回多个 View 对象

Ben*_*ási 3 closures ios swift swiftui

我经常看到这样的代码:

VStack {
  Text("A")
  Text("B")
}
Run Code Online (Sandbox Code Playgroud)

通过查看 swift 教程,我知道这是将闭包指定为函数的最后一个参数的简写。但是,afaik 如果return没有指定关键字,闭包将隐式返回内部表达式的结果。

在这种情况下,有两个Text对象。它们是作为元组还是列表返回?我知道它有效,但我不清楚,关闭返回的到底是什么。

Pau*_*w11 6

Swift Evolution 255 中引入了省略 return 语句的初始功能- 此更改仅允许单个返回值。事实上,本提案考虑了返回多个值的能力并被丢弃。

您所询问的结构最初是由 Apple 作为支持 SwiftUI 的私有实现引入的,但现在已在Swift Evolution 289-Function Builders 中正式采用。

通过参考该文档的介绍部分,您可以看到这些值确实作为元组返回。

// Original source code:
@TupleBuilder
func build() -> (Int, Int, Int) {
  1
  2
  3
}

// This code is interpreted exactly as if it were this code:
func build() -> (Int, Int, Int) {
  let _a = TupleBuilder.buildExpression(1)
  let _b = TupleBuilder.buildExpression(2)
  let _c = TupleBuilder.buildExpression(3)
  return TupleBuilder.buildBlock(_a, _b, _c)
}
Run Code Online (Sandbox Code Playgroud)

  • @BenjaminTamasi 它并不强大,它是一团混乱。 (2认同)