Ios SwiftUI-使用var或let从两个文本字段添加值
如何在SwiftUI中添加两个文本字段的值 我有以下代码:Ios SwiftUI-使用var或let从两个文本字段添加值,ios,swift,swiftui,textfield,Ios,Swift,Swiftui,Textfield,如何在SwiftUI中添加两个文本字段的值 我有以下代码: import SwiftUI struct ContentView: View { @State private var value1 = "" @State private var value2 = "" private var sumValues = (Int(value1) ?? 0) + (Int(value2) ?? 0)
import SwiftUI
struct ContentView: View {
@State private var value1 = ""
@State private var value2 = ""
private var sumValues = (Int(value1) ?? 0) + (Int(value2) ?? 0)
var body: some View {
VStack {
TextField("type value 1 here", text: $value1)
.keyboardType(.numberPad)
TextField("type value 2 here", text: $value2)
.keyboardType(.numberPad)
Text("sum: \(sumValues)")
// I need to have a var or let, so I cannot use something like this:
//Text("sum: \((Int(value1) ?? 0) + (Int(value2) ?? 0))")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
我在与private var sumValues的连线中发现此错误…:
无法在属性初始值设定项中使用实例成员“value1”;
属性初始值设定项在“self”可用之前运行
无法在属性初始值设定项中使用实例成员“value2”;
属性初始值设定项在“self”可用之前运行
我认为您可以将
sumValues
更改为计算属性:
private var sumValues: Int {
get {
(Int(value1) ?? 0) + (Int(value2) ?? 0)
}
}
使用
计算属性
private var sumValues: Int { (Int(value1) ?? 0) + (Int(value2) ?? 0) }
可能的方法是将所有这些逻辑(也可能是所有其他逻辑)移动到视图模型中,如下所示-因此保持引擎与视图分离,并让标准的观察动态属性负责视图更新: 这是一个简单的演示。使用Xcode 12/iOS 14进行测试
class CalcViewModel: ObservableObject {
@Published var value1 = "" {
didSet { update() }
}
@Published var value2 = "" {
didSet { update() }
}
@Published var sum: Int = 0
private func update() {
self.sum = (Int(value1) ?? 0) + (Int(value2) ?? 0)
}
}
struct ContentView: View {
@ObservedObject var vm = CalcViewModel()
var body: some View {
VStack {
TextField("type value 1 here", text: $vm.value1)
.keyboardType(.numberPad)
TextField("type value 2 here", text: $vm.value2)
.keyboardType(.numberPad)
Text("sum: \(vm.sum)")
}
}
}
这是行不通的。尝试为一个字段设置一个值,然后将其删除,然后再次添加(
+=
将每次执行->总和
将永远不会被清除)。确定。。其目的是显示唯一的方法。。。并更正为计算器。谢谢@pawello2222。你实际上不需要get
-看看@Frankenstein的答案。@pawello2222这个答案也正确吗?我在某个地方读到,当我们只使用get而不使用set时,我们不需要编写get。但这不是一个有效的答案吗?因为我已经测试过了,而且它是有效的。@mallow是的,它是有效的(我也投了更高的票)。现在被接受的解决方案只是更干净而已。