Установите @State var внутри оператора If в Swift
Я пытаюсь установить значение @State var в операторе If, который находится внутри структуры типа:View, например:
struct Name: View {
@State someVar: Int = 0
var body: some View {
VStack {
if this > that {
someVar = 1
Но когда я делаю это, я получаю сообщение об ошибке: «Тип '()' не может соответствовать« Представлению »; только типы структур / перечислений / классов могут соответствовать протоколам». Если я использую метод класса, который делает то, что мне нужно, например:
if this > that {
someClass.doIt()
}
Я получаю ту же ошибку.
Как правильно это сделать?
1 ответ
Вы не можете поместить такой логический код в свой
body
- все, что у вас может быть, это код, который выводит представление.
Итак, вы могли:
var body: some View {
if this > that {
Text("This")
} else {
Text("That")
}
}
потому что это приводит к представлению (
Text
) рендерится. Однако в вашем примере вы просто выполняете задание.
Это должно быть сделано в отдельной функции или в закрытии вне того, что непосредственно отображается в представлении.
Так:
func testThisThat() {
if this > that {
someVar = 1
}
}
var body: some View {
Button(action: {
testThisThat()
}) {
Text("Run test")
}
}
В приведенном выше примере ваша логика выполняется в закрытии вне иерархии представлений, а
Button
отображается в представлении.
Если вы уточните, что вы пытаетесь сделать, возможно, ответ можно будет уточнить, но это источник ошибки.
Как предлагается в комментариях, вы также можете запустить код логики в
onAppear
, так:
var body: some View {
VStack {
//view code
}.onAppear {
//logic
if this > that {
someVar = 1
}
}
}