【问题标题】:SwiftUI: strange errors with Toggle and ButtonSwiftUI:切换和按钮的奇怪错误
【发布时间】:2020-02-24 15:06:34
【问题描述】:

我对这段代码有疑问。错误消息似乎是错误的,代码应该是正确的。但它不起作用,我不知道原因是什么。谁能给我一个提示?首先,我尝试使用 Text 而不是变量。由于我更改为变量,因此它不起作用。 目标:如果点击按钮并从该视图取回一些数据,我想显示“DetailView”。使用 Toggle & PickerView 输入的数据(由于这个错误,我还没有实现 Picker)。 这是代码:

import SwiftUI

class HandoverData: ObservableObject{
    @Published var Befehl: String = ""
    @Published var WebLnk: String = ""
    @Published var bOnOff: Bool = false
}

struct ContentView: View {
    @State private var bToGo: Bool
    @EnvironmentObject var HandOverData: HandoverData

    var body: some View {
        VStack{
            Text("Hello, World!")
            self.HandOverData.Befehl = "Text"
            self.HandOverData.WebLnk = "www.heise.de"
            Button(action: { //<= Generic parameter 'Label' could not be inferred 
                self.bToGo.toggle()
                }) {
                    Text(HandOverData.Befehl)
            }.sheet(isPresented: self.$bToGo) {
                DetailView(GetDat: HandOverData)
            }
        }
    }
}

struct DetailView: View{
    @ObservedObject var GetDat: HandoverData

    var body: some View{
        VStack{
            Text(GetDat.Befehl)
            Spacer()
            Toggle(isOn: self.GetDat.bOnOff) { <= 'Bool' is not convertible to 'Binding<Bool>'
                Text("An/Aus")
            }
            Spacer()
            Button(action: {
                let http = "https://"
                let url: NSURL = URL(string: http + self.GetDat.WebLnk)! as NSURL
                UIApplication.shared.open(url as URL)
            }) {
                Text(GetDat.WebLnk)
            }
            Spacer()
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

【问题讨论】:

    标签: compiler-errors boolean swiftui picker


    【解决方案1】:

    var body: some View {
            VStack{
                Text("Hello, World!")
                self.HandOverData.Befehl = "Text"
                self.HandOverData.WebLnk = "www.heise.de"
                Button(action: { //<= Generic parameter 'Label' could not be inferred 
                    self.bToGo.toggle()
                    }) {
                        Text(HandOverData.Befehl)
                }.sheet(isPresented: self.$bToGo) {
                    DetailView(GetDat: HandOverData)
                }
            }
        }
    

    你不能执行任何普通的 swift 代码!

    self.HandOverData.Befehl = "Text"
    self.HandOverData.WebLnk = "www.heise.de"
    

    先看一些关于 SwiftUI 的初学者教程。

    这部分

    Toggle(isOn: self.GetDat.bOnOff) { <= 'Bool' is not convertible to 'Binding<Bool>'
        Text("An/Aus")
     }
    

    使用

    Toggle(isOn: self.$GetDat.bOnOff) { <= 'Bool' is not convertible to 'Binding<Bool>'
        Text("An/Aus")
     }
    

    改为

    【讨论】:

    • 谢谢。我有这些课程,但我想如果允许count += 1,这应该也是可能的。谢谢你的解释。
    • @Enrico 你不能仅仅因为闭包是 VStack 结构初始化器的一部分而执行你的代码。
    • @Enrico 如果源代码中有count += 1这样的语句,这不是因为那里使用了什么表达式,而是在哪里。
    猜你喜欢
    • 1970-01-01
    • 2020-11-15
    • 2021-09-11
    • 1970-01-01
    • 2019-01-16
    • 2022-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    相关资源
    最近更新 更多