ios 如何使可观察的类变量@Bindable当它也被用作@Environment?

ltqd579y  于 11个月前  发布在  iOS
关注(0)|答案(1)|浏览(126)

我有以下用户配置文件的全局可观察:

@Observable class User {
  var username = ""
  var isAdmin = false
}

字符串
然后将这个observable设置为一个环境,并从不同的地方访问,如下所示

@Environment(User.self) private var user


我现在试图弄清楚如何在这里使用@Bindable,以便有一个可以更新用户名的文本字段,但简单地使用$似乎不起作用。

TextField(text: $user.username)


上面抛出一个类似这样的错误Cannot find '$user' in scope

soat7uwm

soat7uwm1#

@Bindable可以与局部变量一起使用:
body中,只需执行

@Bindable var bindableUser = user

字符串
创建一个Bindable用户。然后你可以像往常一样使用$bindableUser.someProperty
下面是一个简单的例子:

struct Foo: View {
    @Environment(User.self) var user
    
    var body: some View {
        Text(user.username)
        Text(user.isAdmin ? "Yes" : "No")
        @Bindable var bindableUser = user
        TextField("Foo", text: $bindableUser.username)
        Toggle("Foo", isOn: $bindableUser.isAdmin)
    }
}

相关问题