Result Builder — 它是什么、语法和应用

作者: IT Sectr 发布日期: 2026-06-20 阅读时间: 8 分钟
译
译
译

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.

译
译
译

译
    译
  • 译Result Builder — Swift,
  • 译
  • 译@ViewBuilder — : view TupleView
  • 译
  • 译 — if/else, switch, for-in译 buildOptional, buildEither, buildArray
  • 译
  • 译 DSL — HTML, CSS, ,
  • 译
  • 译Swift 5.4 result builders — closure
  • 译
译
译 译
译

Result Builder?

译

译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- —.

译
译
译

Result Builder

译

Swift , @resultBuilder,. , :

译
译swift
@resultBuilder
struct StringBuilder {
    static func buildBlock(_ parts: String...) -> String {
        parts.joined(separator: " ")
    }
}
译

— :

译
译swift
@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- ,.

译
译
译

: buildBlock, buildOptional, buildEither

译

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.

译
译
译

Result Builder

译

HTML-. DSL HTML Swift:

译
译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:

译
译swift
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 SwiftUI

译

译@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.

译
译swift
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.

译
译
译

Result Builder

译

— 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?译
译

译Result Builder — Swift,. DSL, — @ViewBuilder SwiftUI view.

译
译
译
译 Result Builder?译
译

译 @resultBuilder译 buildBlock. buildOptional译 buildEither, — buildArray. closure.

译
译
译
译 Result Builder?译
译

译 buildBlock. — buildOptional, buildEither, buildArray, buildExpression, buildFinalResult —. , DSL.

译
译
译
译 @ViewBuilder — Result Builder?译
译

译@ViewBuilder — result builder View. SwiftUI @resultBuilder, buildBlock view (TupleView), buildEither ConditionalContent buildArray ForEach.

译
译
译
译 ?译
译

译, buildBlock 10. (Group, VStack). variadic buildBlock.

译
译
译
译
译

译
    译
  • 译Result Builder — Swift,
  • 译
  • 译译 buildBlock, buildEither, buildOptional, buildArray
  • 译
  • 译@ViewBuilder — result builder SwiftUI, view
  • 译
  • 译 DSL: HTML, , — ,
  • 译
  • 译: 10 buildBlock, ,
  • 译
  • 译Swift 5.4+ — , body view
  • 译
译
译
译

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读