【发布时间】:2020-05-22 17:08:36
【问题描述】:
在 SwiftUI 中,我有一个文本字段,用户可以在其中输入信用卡号:
@EnvironmentObject var userModData:UserModData
var body: some View {
...
HStack {
Text("Card number")
.frame(width: 100, height: nil, alignment: .leading)
TextField("Enter card number", text: $userModData.cnumber).keyboardType(.numberPad)
}
每次用户输入四位数字时,我都想添加一个空格,例如。 G。它应该看起来像:1234 5678 1234 5678
在可观察对象类中,我尝试写
class UserModData:ObservableObject {
@Published var cnumber:String = " " {
didSet{
self.cnumber = self.NumberFormatter()
}
}
func NumberFormatter() -> String {
var newValue = self.cnumber
if newValue.count == 4 {
newValue = newValue + " "
}
return newValue
}
}
这会导致运行时错误 EXC_BAD_ACCESS,因为在函数中连接字符串时,会一遍又一遍地调用 didSet 代码(至少我猜这是因为它导致溢出的原因?!)。
有没有人有一个优雅的解决方案来解决这个问题?老实说,我对 SwiftUI 还很陌生,我想解决方案比我预期的要容易。
提前致谢!
【问题讨论】: