如何在 SwiftUI 中将布尔表达式转换为 Binding<Bool>?

Nin*_*ero 8 swift swiftui

我有一个文本字段,当用户输入特定字符串时我试图转到另一个视图。

import SwiftUI

struct ContentView: View {
    @State var whether_go = "No"
    var body: some View {
                    TextField("Goto?", text: $whether_go)
                        .navigate(to: CircleImage(), when: whether_go == "Yes")
    }
}
Run Code Online (Sandbox Code Playgroud)

这会引发错误:Cannot convert value of type 'Bool' to expected argument type 'Binding<Bool>'因为when参数需要 Binding<Bool>

我尝试使用

when: Binding<Bool>(get: whether_happy == "Yes"))
Run Code Online (Sandbox Code Playgroud)

这会引发另一个错误:No exact matches in call to initializer.

那么我应该怎么做才能将布尔值转换为 Binding<Bool> ?

Dáv*_*tor 14

您需要使用Binding(get:set:)初始化程序。

var body: some View {
        let binding = Binding<Bool>(get: { self.whether_go == "YES" }, set: { if $0 { self.whether_go = "YES"} else { self.whether_go = "NO" }})
        return TextField("Goto?", text: $whether_go)
                        .navigate(to: CircleImage(), when: binding)
    }
Run Code Online (Sandbox Code Playgroud)

如果您希望Binding是单向的,只需将一个空闭包传递给set

let binding = Binding<Bool>(get: { self.whether_go == "YES" }, set: { _ in })
Run Code Online (Sandbox Code Playgroud)

与你的问题无关,但为什么是whether_goaString而不是 a Bool?另外,您应该遵循 Swift 命名约定,即变量名称采用小驼峰命名法 ( whetherGo)。