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

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

Result Builder — 是Swift属性,通过@resultBuilder协议实现,将表达式序列转换为复合值。编译器将带有ifforswitch控制结构的代码块转换为构建器静态方法的调用—buildBlockbuildEitherbuildArray。根据Swift Evolution提案SE-0289(2022),result builder允许在Swift内部创建声明式DSL,无需外部解析器。最著名的例子—@ViewBuilder在SwiftUI中,视图本体由条件和循环元素以声明式风格构建。译 Result Builder — Swift, @resultBuilder,. if, for, switchbuildBlock, 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-inbuildOptional, 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, buildOptionalbuildEither. for-inbuildArray. , Swift- ,.

: buildBlock, buildOptional, buildEither

result builder ,. :

译 译 译 译译译译译 译 译 译译译译译 译译译译译 译译译译译 译译译译译 译译译译译 译译译译译 译译译译译 译
buildBlock
buildOptional if elseifelse
buildEither(first:) if-elseifelse
buildEither(second:) if-elseifelse
buildArray for-infor-in
buildExpression buildBlock
buildFinalResult closure

buildBlock variadic —. buildOptionalbuildEither , buildArray —. Swift Documentation (2025), DSL.

buildExpression. , @ViewBuilder buildExpressionText, Image, ButtonView.

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, Listbody. view.

@ViewBuilder result builder, if-else, switchfor-in. , buildEither(first:) view; — buildEither(second:). , SwiftUI AnyViewConditionalContent.

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 GroupAnyView,. @ViewBuilder ConditionalContentTupleView.

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?

@resultBuilderbuildBlock. buildOptionalbuildEither, — 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应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读