CTMacUser
(Daryle Walker)
1
As I understand it for Result Builders,
- a lone
if
statement maps to a build-optional
- an
if
-else
pair maps to two build-either calls
- a switch maps to a tree of build-either calls
- an
if
/(else
-if
)/else
chain also maps to a tree of build-either calls
So what happens for if
/(else
-if
) chain with no plain-else
case? A bunch of build-either ending with a build-optional?
2 Likes
Danny
2
Depending on what you mean by "maps", yes!
(You need both buildEither
s, for else
to compile, but they don't actually get called unless necessary.)
@resultBuilder enum ResultBuilder {
static func buildEither(first: some Any) -> Never { fatalError() }
static func buildEither(second: some Any) -> Never { fatalError() }
static func buildOptional(_: Never?) -> Int { 1 }
static func buildBlock(_ value: Int) -> Int { value }
}
@ResultBuilder var value: Int {
if false { 0 } else if false { 0 }
}
#expect(value == 1)
1 Like