SwiftUI:切换和按钮的奇怪错误

Posted

技术标签:

【中文标题】SwiftUI:切换和按钮的奇怪错误【英文标题】:SwiftUI: strange errors with Toggle and Button 【发布时间】: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()
    

【问题讨论】:

【参考方案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这样的语句,这不是因为那里使用了什么表达式,而是在哪里。

以上是关于SwiftUI:切换和按钮的奇怪错误的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI ScrollView、GeometryReader 和 Button = 奇怪的行为

SwiftUI - 奇怪的动画

SwiftUI 中 Stepper 的奇怪行为

iphone - UIActionSheet 和 UITabBar 之间的奇怪错误

在 SwiftUI 视图中的 TextField 后面使用多个 SecureField 时的奇怪行为

SwiftUI 动画错误?