繁体   English   中英

如何在 swiftui 中将对象属性作为绑定传递

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM