ale*_*ner 17 swift swift-data swiftui
我想将自定义枚举保存到我的SwiftData模型中。我可以让它工作,它显示甚至更新 UI 中的值。不过,重新启动应用程序时,枚举变量/实体的更改 \xe2\x80\x99t 仍然存在!
\n使用自定义枚举时需要注意什么有什么建议吗?
\nenum Type: Int, Codable {\n case foo = 0\n case bar = 1\n}\n\n@Model\nfinal public class Item {\n var type: Type\n}\nRun Code Online (Sandbox Code Playgroud)\nstruct DetailView: View {\n @Bindable var item: Item\n \n // MARK: -\n var body: some View {\n Picker("Type", selection: $item.type) {\n Text("Foo").tag(Type.foo)\n Text("Bar").tag(Type.bar)\n }\n .pickerStyle(.segmented)\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
小智 10
该问题自 iOS 版本 17 beta 7 以来已得到修复。现在下面的代码可以正常工作。发行说明
enum ItemType: Int, Codable {
case foo = 0
case bar = 1
}
@Model
final public class Item {
var type: ItemType
init(type: ItemType) {
self.type = type
}
}
struct DetailView: View {
@Bindable var item: Item
var body: some View {
Picker("Type", selection: $item.type) {
Text("Foo").tag(ItemType.foo)
Text("Bar").tag(ItemType.bar)
}
.pickerStyle(.segmented)
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
这个解决方案对我有用。希望枚举能够在 SwiftData 的未来版本中得到修复。
enum SomeType: Int, Codable {
case foo = 0
case bar = 1
}
@Model
final public class Item {
@Transient var type: SomeType {
get { SomeType(rawValue: _type)! }
set { _type = newValue.rawValue }
}
@Attribute var _type: SomeType.RawValue
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4173 次 |
| 最近记录: |