String 快捷选择器值

String 快捷选择器值,string,binding,swiftui,picker,String,Binding,Swiftui,Picker,我最近一直在尝试用swiftui编程, 很难,如何将选择器的值转移到 文本字段,我绝望了 为什么我不能像在文本字段中那样直接使用$khValue 我已经花了好几个小时在网上搜索…我还没有找到任何东西,swiftUI和swift完全不同 import SwiftUI struct KH_aus_Co2: View { @State private var kh_Picker : String = "" @State private var ph_Picker:

我最近一直在尝试用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, height: 70, 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, height: 100, 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()
        
    }
}
导入快捷界面
结构KH_aus_Co2:视图{
@国家私有变量kh_选取器:String=“”
@国家私有变量选取器:String=“”

var kh_vol=[Int](0..如果我理解正确,您希望选择器更新textfields中的值。如果是这样,那么您希望将相同的值绑定到textfield正在使用的选择器。由于该值是
字符串
,因此您将希望在选择器中使用
字符串

使用
.map(String.init)
kh\u vol
ph\u vol
范围转换为
字符串的数组,并使用
\.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), id: \.self) { index in
        Text(index)
    }
    
}
.frame(width: geometry.size.width/3, height: 100, alignment: .center)
.clipped()

如果我理解正确,您希望选择器更新textfields中的值。如果是,则您希望将textfield使用的相同值绑定到选择器。由于该值是
字符串
,因此您将希望在选择器中使用
字符串

使用
.map(String.init)
kh\u vol
ph\u vol
范围转换为
字符串的数组,并使用
\.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), id: \.self) { index in
        Text(index)
    }
    
}
.frame(width: geometry.size.width/3, height: 100, alignment: .center)
.clipped()

首先,选择器选择和标记(或id)应该是相同的类型,所以选择是有效的(您的选择是字符串,但标记是Int,所以它不起作用)。但一般来说,您的帖子不清楚。您想实现什么?目标是什么?您能否澄清(可能会将示例最小化到问题区域)。首先,选择器选择和标记(或id)应该是相同的类型,所以选择是有效的(你的选择是字符串,但标记是Int,所以它不起作用)。但一般来说,你的帖子不清楚。你想实现什么?目标是什么?你能澄清一下(可能会将示例减少到问题区域)。