Как вернуть представление с помощью ViewModifiers - PullRequest
1 голос
/ 08 марта 2020

Я хочу вернуть View в зависимости от содержимого поля в массиве. Это работает, но у меня есть проблема, если я пытаюсь добавить ViewModifiers к представлению. Это не сработает.

struct CodesView: View {
    var body: some View {
            ScrollView{
                ForEach(0 ..< codes.count) {idx in
                    Result(selector: self.codes[idx].Zeile)
                }
            }
       }
   }
    struct Result: View{
        var selector: String

        var body: some View{
            switch selector {
            case "->Text1":
                return VStack{
                    Text("Lorem ipsum dolor sit amet")
                    .bold()
                }
            // serval other case will follow...
            default:
                return VStack{
                    Text("\(selector)")
                    .frame(width: 350, alignment: .leading)    // line throw an error
                    .font(.system(.body, design: .monospaced)) // line throw an error 
                }
            }
        }
    }

Сообщение об ошибке: Функция объявляет непрозрачный тип возврата, но операторы возврата в своем теле не имеют соответствующих базовых типов

Как мне нужно объявить функцию, чтобы получить результат с ViewModifier? Мне нужен другой макет для разных возвращаемых видов.

Ответы [ 2 ]

2 голосов
/ 08 марта 2020

Следующее решает ваш случай

struct Result: View {
    var selector: String

    var body: some View {
        Group {
            if self.selector == "->Text1" {
                VStack {
                    Text("Lorem ipsum dolor sit amet")
                        .bold()
                }
            } else {
                VStack {
                    Text("\(selector)")
                        .frame(width: 350, alignment: .leading)
                        .font(.system(.body, design: .monospaced))
                }
            }
        }
    }
}
0 голосов
/ 08 марта 2020

Вы не можете использовать операторы switch в теле. Здесь разрешено просто «если».

, но проверьте этот ответ здесь, это поможет: Альтернатива переключению оператора в блоке SwiftUI ViewBuilder?

Пример:

enum T {
    case a
    case b
}

struct ContentView: View {

    var a : T =  .a

    var body : some View {

        Group { () -> Text in
            switch a {
            case .a:
                return Text("a")
            case .b:
                return Text("b")
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...