[英]How can I pass an object property as binding in swiftui
我有一个带有可选用户变量的 UserService 类。
struct User: Codable {
var id, first_name, last_name, dob: String
}
class UserService : ObservableObject {
@Published var user: User?
}
我将这个对象从一个视图传递到 NavigationLink 中的另一个视图。
NavigationLink(destination: EditProfileView(userService: userService).navigationBarBackButtonHidden(true), isActive: $editProfileScreenActive){
Text("")
}
在 EditProfileView 中,我无法在 TextField 中使用 User 的属性。 例如
TextField("first_name", text: $userService.user?.first_name)
我尝试了不同的方法,但无法将 first_name 作为绑定传递给 TextField。 我收到不同类型的编译错误。
任何建议如何解决这个问题? (我不是一个经验丰富的快速程序员:))
由于用户是可选的并且TextField
需要一个非可选的 String 作为文本参数,因此您必须首先检查用户是否不是nil
。
if let user = Binding($userService.user) {
TextField("first_name", text: user.firstName)
}
但是,如果您仍然希望在用户nil
时拥有一个文本字段(这取决于您在此屏幕上要实现的目标,我无法从您的问题中确定这一点),您可能只需要一个@State
变量您使用用户的名字进行初始化。
通过创建一个等于User
的共享让来检查。 像这样:
struct User: Codable {
static let shared = User()
var id, first_name, last_name, dob: String
}
所以现在你只需要输入User.shared.propertyName
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.