我目前正在构建一个页面,用于向本地数据库添加玩家信息。我有一组TextFields用于每个输入,这些输入与玩家结构中的元素相链接。
var body: some View {
VStack {
TextField("First Name", text: $player.FirstName)
.textFieldStyle(RoundedBorderTextFieldStyle())
TextField("Last Name", text: $player.LastName)
.textFieldStyle(RoundedBorderTextFieldStyle())
TextField("Email", text: $player.eMail)
.textFieldStyle(RoundedBorderTextFieldStyle())
TextField("Shirt Number", text: $player.ShirtNumber)
.textFieldStyle(RoundedBorderTextFieldStyle())
TextField("NickName", text: $player.NickName)
.textFieldStyle(RoundedBorderTextFieldStyle())
TextField("Height", text: $player.Height)
.textFieldStyle(RoundedBorderTextFieldStyle())
TextField("Weight", text: $player.Weight)
.textFieldStyle(RoundedBorderTextFieldStyle())
Button(action: {
submitPlayer(player: self.player)T
}) {
Text("Submit")
}
Spacer()
}
}
我的播放器结构体是:
struct Player: Hashable, Codable, Identifiable {
var id: Int
var FirstName: String
var LastName: String
var NickName: String
var eMail: String
var ShirtNumber: Int
var Height: Int
var Weight: Int
}
问题在于ShirtNumber,Height和Weight都是Int值。当我将它们绑定到TextField时,会出现错误,提示“无法将类型为‘Binding’的值转换为预期参数类型‘Binding’”。我查阅了所有关于SwiftUI的资料,但似乎不可能有一个绑定整数值的TextField。
我的问题是,是否可以创建一个新类来扩展TextField,但只允许输入整数,并绑定一个整数变量,就像这样?
struct IntTextField: TextField {
init(_ text: String, binding: Binding<Int>) {
}
}
到目前为止,我只找到了一个部分回答我的问题(只接受整数输入),来自这个问题。我正在寻找一种将此与Binding<Int>
结合使用的方法。
感谢您的帮助。
init(_:value:formatter:prompt:)
在 IOS 16 中仍然有效。当输入时,更改的值也会适当地反映出来。 - burnsi