我真的被困在这了。我想做几个按钮,每个按钮都有独立的ifButtonDisabled状态。当用户单击该按钮时,该按钮将禁用。由于我希望我的应用在重新加载或刷新时记住按钮的状态,因此我使用了AppStorage。问题是,由于每个按钮都有独立的状态,AppStorage变量也应该不同。但由于self不可用,我无法为AppStorage变量指定动态名称。
还有,有没有更好的替代方案来实现相同的功能???
struct ButtonData {
var id: UUID {
return UUID()
}
let level: String
let bgColor: String
let image: String
@AppStorage(level) var ifDisabled: Bool = false
}
字符串
1条答案
按热度按时间xmd2e60i1#
我不知道为什么你会想要一个每次访问都会改变的
id
,但是如果你只是想初始化isDisabled
,你可以写你自己的init
,并在那里给_isDisabled
分配一个AppStorage
。字符串
也就是说,如果你想像这样使用它,你的视图将不会更新:
型
因为
AppStorage
有一个nonmutating
setter,所以设置它不会导致视图中的buttonData
发生变化,所以SwiftUI不知道你的视图需要更新。所以如果你想让
AppStorage
更新视图,你需要直接把它放在一个View
中。例如,您可以创建自己的按钮视图,它接受一个ButtonData
,并相应地设置其禁用状态:型
现在,每当superview更新
AppStorage
时,MyButton
也会更新其禁用状态。