Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SwiftUI将Int值传递给ViewModel_Ios_Swiftui_Combine - Fatal编程技术网

Ios SwiftUI将Int值传递给ViewModel

Ios SwiftUI将Int值传递给ViewModel,ios,swiftui,combine,Ios,Swiftui,Combine,我试图将Int传递给ViewModel,但它不起作用。值仍然是0。字符串或数据对象没有问题,但Int、Double和其他数字值仍然是0值。我也试过这样做: @发布容量:Int 但还是一样。如何解决这个问题?使用字符串并转换为给定类型 AddVehicleView: import SwiftUI struct AddVehicleView: View { @ObservedObject var viewModel: AddVehicleViewModel @State private va

我试图将Int传递给ViewModel,但它不起作用。值仍然是0。字符串或数据对象没有问题,但Int、Double和其他数字值仍然是0值。我也试过这样做:

@发布容量:Int

但还是一样。如何解决这个问题?使用字符串并转换为给定类型

AddVehicleView: 

import SwiftUI

struct AddVehicleView: View {

@ObservedObject var viewModel: AddVehicleViewModel
@State private var selected = 0
@State private var showingAlert = false

init(viewModel: AddVehicleViewModel) {
    self.viewModel = viewModel
    UITableView.appearance().backgroundColor = .clear
    UITableView.appearance()
}

var body: some View {
    
    VStack(alignment: .leading) {
        
        Text("Add new vehicle")
            .font(.system(size: 26, weight: .medium))
            .padding(.top, -30)
            .padding(.leading, 20)
        
        VStack {
            
            TextField("Brand/Model etc", text: $viewModel.name)
                .padding(.top, 10)
                .padding(.leading, 20)
                .padding(.trailing, 20)
                .font(.system(size: 20))
                .textFieldStyle(RoundedBorderTextFieldStyle())
            
            TextField("Capacity", value: $viewModel.tankCapacity, formatter: NumberFormatter()) // I am trying send int value from here
                .padding(.top, 30)
            .padding(.leading, 20)
            .padding(.trailing, 20)
            .font(.system(size: 20))
            .textFieldStyle(RoundedBorderTextFieldStyle())
            
            Form {
                Section {
                    Picker("Fuel type", selection: $viewModel.fuelType) {
                        ForEach(0 ..< viewModel.fuels.count) {
                            Text(self.viewModel.fuels[$0]).tag($0)
                                .padding(.leading, 5)
                                .padding(.trailing, 5)
                        }
                    }
                }
            }
            .padding(.leading, 5)
            .padding(.trailing, 5)
            
            Button("Add") {
                if self.viewModel.name.isEmpty {
                    self.showingAlert = true
                }
                else {
                    self.viewModel.saveVehicle()
                    self.viewModel.name = ""
                }
                
            }
            .frame(width: 200, height: 50)
                .background(Color.blue)
                .font(.system(size: 20, design: .default))
                .foregroundColor(Color.white)
            .cornerRadius(10)
            .padding(.top, -350)
                .alert(isPresented: $showingAlert) {
                    Alert(title: Text("Warning!"), message: Text("Fill the fields"))
            }
        }
        Spacer()
        
    }
}
}

在调用
saveVehicle
之前,您需要先提交文本字段(按enter键)

如果改为在视图模型中执行以下操作:

@Published var tankCapacityText = "" {
    didSet {
        tankCapacity = Int(tankCapacityText) ?? 0
    }
}
@Published var tankCapacity = 0
在你看来:

TextField("Capacity", text: $vm.tankCapacityText)

用户无需按enter键。

您在哪里修改ViewModel的tankCapacity值。我编辑了代码。视图和视图模型粘在一起。它工作得非常好!非常感谢你!
TextField("Capacity", text: $vm.tankCapacityText)