Skip to content

Commit fe9224d

Browse files
committed
[TypeChecker] NFC: Add a test-case for mixed SwiftUI + multi-statement closures
This test-case used to crash with multi-statement closure inference enabled in result builder contexts.
1 parent b0dc6ec commit fe9224d

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
// RUN: %target-typecheck-verify-swift -target %target-cpu-apple-macosx10.15 -swift-version 5 -experimental-multi-statement-closures
2+
// REQUIRES: objc_interop
3+
// REQUIRES: OS=macosx
4+
5+
import SwiftUI
6+
7+
enum Status {
8+
case complete
9+
case waiting
10+
}
11+
12+
struct Item : Hashable {
13+
var question: String
14+
var answer: Int
15+
}
16+
17+
func transform(_ v: Int) -> String? { return String(v) }
18+
func transform(_ v: Double) -> String? { return String(v) }
19+
20+
struct MyView : View {
21+
var status: Status
22+
23+
var items: [Item] = []
24+
25+
var currItem: Item {
26+
get { fatalError() }
27+
nonmutating set { }
28+
}
29+
30+
var body: some View {
31+
ZStack {
32+
ItemsView {
33+
EmptyView()
34+
} results: {
35+
switch (status) {
36+
case .complete:
37+
ForEach(items, id: \.self) { item in
38+
if let question = item.question,
39+
let answer = item.answer {
40+
ItemView {
41+
currItem.question = question
42+
currItem.answer = answer
43+
} content: {
44+
AnswerView(title: "",
45+
color: .red,
46+
answer: transform(answer) ?? "",
47+
selected: false)
48+
}
49+
}
50+
}
51+
52+
default:
53+
EmptyView()
54+
}
55+
}
56+
}
57+
}
58+
}
59+
60+
struct AnswerView : View {
61+
var title: String
62+
var color: Color
63+
var answer: String
64+
var selected: Bool
65+
66+
var body: some View {
67+
EmptyView()
68+
}
69+
}
70+
71+
struct ItemsView<Content: View, Results: View>: View {
72+
@ViewBuilder var content: Content
73+
@ViewBuilder var results: Results
74+
75+
var body: some View {
76+
EmptyView()
77+
}
78+
}
79+
80+
struct ItemView<Content: View> : View {
81+
var fn: () -> Void
82+
@ViewBuilder var content: Content
83+
84+
var body: some View {
85+
EmptyView()
86+
}
87+
}

0 commit comments

Comments
 (0)