swiftui - 捆绑在 SwiftUI 视图 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
}
}
}
推荐阅读
- java - 如何使用 mockito 或 Junit 测试此方法?
- list - 对子列表的操作
- python - 无法修复“浮动”对象不可调用错误
- laravel - 护照身份验证在我的 Laravel 5.4 应用程序中不起作用?
- python - Django:并行运行几个任务
- java - Spring boot Reactive app 启动 tomcat 代替 Netty
- android - 如何在 Google Play 控制台中更新已删除的应用
- linux - 如何通过 unix shell 脚本从远程服务器为特定用户发送电子邮件
- django - Django JWT 获取用户信息
- python - WinError 32:该进程无法访问该文件,因为它正在被另一个进程使用