Result Builder — 是Swift属性,通过@resultBuilder协议实现,将表达式序列转换为复合值。编译器将带有if、for、switch控制结构的代码块转换为构建器静态方法的调用—buildBlock、buildEither、buildArray。根据Swift Evolution提案SE-0289(2022),result builder允许在Swift内部创建声明式DSL,无需外部解析器。最著名的例子—@ViewBuilder在SwiftUI中,视图本体由条件和循环元素以声明式风格构建。译
Result Builder — Swift, @resultBuilder,. if, for, switch — buildBlock, buildEither, buildArray. Swift Evolution proposal SE-0289 (2022), result builders DSL Swift. — @ViewBuilder SwiftUI, view.
TupleViewif/else, switch, for-in译 buildOptional, buildEither, buildArray译Result Builder ( function builders) — Swift, , ,. @resultBuilder, ,.
result builders SwiftUI body. view TupleView. Result Builder , ,.
译 Swift Evolution SE-0289, 2022 , result builder — function builders (SE-0258, Swift 5.1). : @_functionBuilder译 @resultBuilder , closure- , body view.
result builders, — , , UI- —.
译 Swift , @resultBuilder,. , :
@resultBuilder
struct StringBuilder {
static func buildBlock(_ parts: String...) -> String {
parts.joined(separator: " ")
}
}
— :
译@StringBuilder
func greeting() -> String {
"Hello"
"World"
"from"
"Swift"
}
// 编译器将其转换为:
// StringBuilder.buildBlock("Hello","World","from","Swift")
// 结果: "Hello World from Swift"
译 buildBlock. if, buildOptional译 buildEither. for-in译 buildArray. , Swift- ,.
result builder ,. :
译| 译 | 译 | 译 |
|---|---|---|
| 译buildBlock | 译译 | 译 |
| 译buildOptional | 译if else | 译译 if译 else | 译
| 译buildEither(first:) | 译if-else | 译译 if译 else | 译
| 译buildEither(second:) | 译if-else | 译译 if译 else | 译
| 译buildArray | 译for-in | 译译 for-in | 译
| 译buildExpression | 译译 | buildBlock | 译
| 译buildFinalResult | 译译 | closure | 译
译 buildBlock variadic —. buildOptional译 buildEither , buildArray —. Swift Documentation (2025), DSL.
译buildExpression. , @ViewBuilder buildExpression译 Text, Image, Button译 View.
HTML-. DSL HTML Swift:
译@resultBuilder
enum HTMLBuilder {
static func buildBlock(_ components: String...) -> String {
components.joined()
}
static func buildOptional(_ component: String?) -> String {
component ?? ""
}
static func buildEither(first component: String) -> String {
component
}
static func buildEither(second component: String) -> String {
component
}
static func buildArray(_ components: [String]) -> String {
components.joined()
}
}
HTML:
译func div(@HTMLBuilder _ content: () -> String) -> String {
"<div>\(content())</div>"
}
func p(_ text: String) -> String {
"<p>\(text)</p>"
}
let page = div {
p("Hello")
p("World")
if showFooter {
p("页脚")
}
}
// 结果: <div><p>Hello</p><p>World</p><p>Footer</p></div>
«Building Custom Result Builders in Swift» Swift.org (2025), , UI- , — ,.
译译@ViewBuilder — result builder, SwiftUI, content view: VStack, HStack, ZStack, Group, List译 body. view.
译@ViewBuilder result builder, if-else, switch译 for-in. , buildEither(first:) view; — buildEither(second:). , SwiftUI AnyView译 ConditionalContent.
struct GreetingView: View {
let isLoggedIn: Bool
var body: some View {
VStack {
Image(systemName: "person.circle")
Text("个人资料")
.font(.title)
if isLoggedIn {
Text("欢迎回来!")
.foregroundColor(.green)
} else {
Button("登录") { }
}
}
}
}
@ViewBuilder Group译 AnyView,. @ViewBuilder ConditionalContent译 TupleView.
— buildBlock. Swift buildBlock 2–10. 10 ,. — Group VStack.
译 — -. let译 x = 5 @ViewBuilder. ,. buildExpression.
— . result builder , if/else. AnyView ,. Hacking with Swift (2025), —.
译Result Builder — Swift,. DSL, — @ViewBuilder SwiftUI view.
译译 @resultBuilder译 buildBlock. buildOptional译 buildEither, — buildArray. closure.
译 buildBlock. — buildOptional, buildEither, buildArray, buildExpression, buildFinalResult —. , DSL.
译译@ViewBuilder — result builder View. SwiftUI @resultBuilder, buildBlock view (TupleView), buildEither ConditionalContent buildArray ForEach.
译, buildBlock 10. (Group, VStack). variadic buildBlock.
译buildBlock, buildEither, buildOptional, buildArray我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。