gpt4 book ai didi

ios - SwiftUI 和数据模型 (CoreData) - 如何更改数据?

转载 作者:行者123 更新时间:2023-12-01 16:20:31 27 4
gpt4 key购买 nike

我对如何使用 Core Data 感到非常困惑与 SwiftUI .有大量关于它的文章,但每个人都只展示了完美运作的精心设计的情况。没有人展示更复杂的东西,我无法弄清楚。我已经尝试了两个星期。 (我能够对其进行编码以使其简单地工作;但是,我正在尝试找到一种好的实用方法,而这正是我正在努力解决的问题)。

这是一个例子:

struct CarView: View {
@State var car: Car

struct Car {
let id: UUID = UUID()
let name: String
let price: Int
}

var body: some View {
VStack {
Text(car.name)
Text("\(car.price)")
}
}
}


struct CarView_Previews: PreviewProvider {
static var previews: some View {
CarView(car: .init(name: "Tesla Model X", price: 42))
}
}


这是一个非常简单的构造,也很容易测试和处理,因为您可以简单地创建一个虚拟 Car例如,使用 XCode 预览。

但是,如果您想向其中添加一个从数据库中提取数据的数据模型,会发生什么?假设你有一个 CarManagedObject NSManagedObject子类。您如何将其连接到我们的 SwiftUI看法?

您可以简单地替换 Car带有 CarManagedObject 的结构子类,因为它符合 ObservableObject .所以这样的事情会起作用:

struct CarView: View {
@ObservedObject var car: CarManagedObject
...
}

然而,现在我们已经紧密耦合了 CarViewCore Data .如果没有它,您将无法使用 View 。创建虚拟数据也很痛苦。所以最好继续使用 Car结构独立于一切。这也是 Apple 在 WWDC 2019 的第 233 次 session 中从大约 37 分钟开始所做的事情: Session 23, WWDC 2019 .

所以你可以这样做:


struct Car {
let id: UUID = UUID()
let name: String
let price: Int

static func create(from: CarManagedObject) -> Car {
...
}
}


在您拥有可以更改的数据之前,这一切都很好。我看不到在基础数据更改时保持结构更新的好方法。此外,我们完全失去了通过 Bindings 的能力。到 subview ,因为 Car struct 不是实际的数据源。更改它不会更改数据模型。

您可以使用 Combine 痛苦地设置它在两个方向上,但这似乎不对。我确定 SwiftUI有能力做到这一点,我只是不知道如何。

有谁知道如何做到这一点?
抱歉,如果我的意思不完全清楚。我真的很困惑。所有这些都让我头疼:D

最佳答案

我在寻找我自己的更基本答案时发现了你的问题。在这里没有找到任何东西,我继续搜索并找到了这个 Apple 文档页面,我认为它可能会回答你的问题。但是,我没有资格(此时)说它确实如此。
https://developer.apple.com/documentation/swiftui/managing-model-data-in-your-app

关于ios - SwiftUI 和数据模型 (CoreData) - 如何更改数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61074961/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com