File: mixed_swiftui_and_multistatement_closures.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (87 lines) | stat: -rw-r--r-- 1,922 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// RUN: %target-typecheck-verify-swift -target %target-cpu-apple-macosx10.15 -swift-version 5
// REQUIRES: objc_interop
// REQUIRES: OS=macosx

import SwiftUI

enum Status {
  case complete
  case waiting
}

struct Item : Hashable {
  var question: String
  var answer: Int
}

func transform(_ v: Int) -> String? { return String(v) }
func transform(_ v: Double) -> String? { return String(v) }

struct MyView : View {
  var status: Status

  var items: [Item] = []

  var currItem: Item {
    get { fatalError() }
    nonmutating set { }
  }

  var body: some View {
    ZStack {
      ItemsView {
        EmptyView()
      } results: {
        switch (status) {
        case .complete:
          ForEach(items, id: \.self) { item in
            if let question = item.question, // expected-error {{initializer for conditional binding must have Optional type, not 'String'}}
               let answer = item.answer {    // expected-error {{initializer for conditional binding must have Optional type, not 'Int'}}
              ItemView {
                currItem.question = question
                currItem.answer = answer
              } content: {
                AnswerView(title: "",
                           color: .red,
                           answer: transform(answer) ?? "",
                           selected: false)
              }
            }
          }

        default:
          EmptyView()
        }
      }
    }
  }
}

struct AnswerView : View {
  var title: String
  var color: Color
  var answer: String
  var selected: Bool

  var body: some View {
    EmptyView()
  }
}

struct ItemsView<Content: View,  Results: View>: View {
  @ViewBuilder var content: Content
  @ViewBuilder var results: Results

  var body: some View {
    EmptyView()
  }
}

struct ItemView<Content: View> : View {
  var fn: () -> Void
  @ViewBuilder var content: Content

  var body: some View {
    EmptyView()
  }
}