微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI选择器VALUE

如何解决SwiftUI选择器VALUE

最近我一直在尝试使用swiftui进行编程, 很难,如何将选择器的价值转移到 文本字段,我很拼命!

为什么我不能直接在文本字段中使用$ khValue值?

我已经花了数小时在互联网上搜索……我还没有发现任何东西,swiftUI与swift完全不同

import SwiftUI

struct KH_aus_Co2: View {
    @State private var kh_Picker : String = ""
    @State private var ph_Picker: String = ""
    
    
    
    var kh_vol = [Int](0..<21)
    var ph_vol = [Int](0..<10)
    
    init(){
        UITableView.appearance().backgroundColor = .clear
    }
    
    @State private var khWert: String = ""
    @State private var phWert: String = ""
    @State private var phco2Wert: String = ""
    
    
    
    var calculation: String {
        
        guard khWert.isEmpty == false,phWert.isEmpty == false else { return "" }
        
        
        guard let kh = Double(khWert),let ph  = Double(phWert) else { return "Error" }
        
        let product = kh/2.8 * pow(10,7.90-ph)
        
        
        return String(format: "%.2f",product)
    }
    
    
    
    var body: some View {
        
        vstack() {
            Text("Co2 = \(calculation) mg/ltr")
                
                .font(.largeTitle)
                .multilineTextAlignment(.center)
                .foregroundColor(Color.green)
                .frame(width: 300,height: 60,alignment: .center)
                .border(Color.green)
                .frame(minWidth: 0,maxWidth: .infinity,minHeight: 0,maxHeight: .infinity,alignment: .center)
            
            
            
            HStack {
                
                
                TextField("KH Wert",text: $khWert)
                    .border(Color.green)
                    .frame(width: 120,height: 70,alignment: .center)
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                    //                            .textContentType(.oneTimeCode)
                    .keyboardType(.numberPad)
                
                TextField("PH Wert",text: $phWert)
                    .border(Color.green)
                    .frame(width: 120,alignment: .center)
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                    //                            .textContentType(.oneTimeCode)
                    .keyboardType(.numberPad)
                
            }
            
            GeometryReader { geometry in
                HStack {
                    
                    Picker(selection: self.$kh_Picker,label: Text("")) {
                        ForEach(0 ..< self.kh_vol.count) { index in
                            Text("\(self.kh_vol[index])").tag(index)
                            //
                        }
                        
                    }
                    .frame(width: geometry.size.width/3,height: 100,alignment: .center) .clipped()
                    
                    Picker(selection: self.$ph_Picker,label: Text("")) {
                        ForEach(0 ..< self.ph_vol.count) { index in
                            Text("\(self.ph_vol[index])").tag(index)
                        }
                        
                    }
                    .frame(width: geometry.size.width/3,alignment: .center) .clipped()
                    
                    
                }
            }
            
        }
            
            
        .navigationBarTitle(Text("Co2 aus KH & PH"))
        .font(/*@START_MENU_TOKEN@*/.title/*@END_MENU_TOKEN@*/)
        
        
    }
    
    
    
}

struct KH_aus_Co2_Previews: PreviewProvider {
    static var previews: some View {
        Co2_aus_KH()
        
    }
}

非常感谢您的帮助

尤尔根(Jürgen)....................................

解决方法

如果我对您的理解正确,那么您希望选择器更新文本字段中的值。如果是这样,则您要将相同的值绑定到文本字段正在使用的选择器。由于该值是String,因此您将需要在选择器中使用String值。

使用.map(String.init)kh_volph_vol范围转换成String的数组,并使用\.self作为id::>

Picker(selection: self.$khWert,label: Text("")) {
    ForEach(self.kh_vol.map(String.init),id: \.self) { index in
        Text(index)
    }
    
}
.frame(width: geometry.size.width/3,height: 100,alignment: .center)
.clipped()

Picker(selection: self.$phWert,label: Text("")) {
    ForEach(self.ph_vol.map(String.init),alignment: .center)
.clipped()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。