[英]Binding<String?> on the SwiftUI View TextField
我有以下視圖模型:
struct RegistrationViewModel {
var firstname: String?
}
我想在 TextField 中綁定 firstname 屬性,如下所示:
TextField("First name", text: $registrationVM.firstname)
.textFieldStyle(RoundedBorderTextFieldStyle())
我不斷收到不允許綁定的錯誤。
要綁定對象,您的變量需要符合新包裝器@State
、 @Binding
、 @ObservableObject
等之一。
因為您的RegistrationViewModel
不符合View
唯一的方法是讓您的RegistrationViewModel
符合ObservableObject
。
class RegistrationViewModel: ObservableObject {
@Published var firstname: String?
}
完成后,您可以將其稱為View
使用
@ObservedObject var resgistrationVM: RegistrationViewModel = RegistrationViewModel()
或作為@EnvironmentObject
https://developer.apple.com/tutorials/swiftui/handling-user-input
此外,SwiftUI 不能很好地處理可選項,但extension
可以很容易地處理它。
extension Optional where Wrapped == String {
var _bound: String? {
get {
return self
}
set {
self = newValue
}
}
public var bound: String {
get {
return _bound ?? ""
}
set {
_bound = newValue.isEmpty ? nil : newValue
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.