已关闭。此问题为opinion-based。目前不接受回答。
**要改进此问题吗?**更新此问题,以便editing this post可以使用事实和引文来回答。
23小时前关闭
截至18小时前,社区正在审查是否重新讨论这个问题。
Improve this question的
假设你有一个SwiftUI应用,比如landmarks app,它目前有一个Observable类示例负责为整个应用提供数据:
@Observable
class ModelData {
var landmarks: [Landmark] = load("landmarkData.json")
var hikes: [Hike] = load("hikeData.json")
var profile = Profile.default
var features: [Landmark] {
landmarks.filter { $0.isFeatured }
}
var categories: [String: [Landmark]] {
Dictionary(
grouping: landmarks,
by: { $0.category.rawValue }
)
}
}
字符串
它是这样提供给应用程序的:
@main
struct LandmarksApp: App {
@State private var modelData = ModelData()
var body: some Scene {
WindowGroup {
ContentView()
.environment(modelData)
}
}
}
型
并在应用程序的各个组件中访问,如下所示:
@Environment(ModelData.self) var modelData
型
如果我们要将此应用程序转换为SwiftData,我们可以:
A)分别对Landmark和Hike对象进行建模,方法是在每个对象上放置“@Model”..
B)或者..(这是问题所在).
@Model
class ModelData {
var landmarks: [Landmark]
var hikes: [Hike]
var profile: Profile
var features: [Landmark] {
landmarks.filter { $0.isFeatured }
}
var categories: [String: [Landmark]] {
Dictionary(
grouping: landmarks,
by: { $0.category.rawValue }
)
}
init(landmarks: [Landmark] = load("landmarks.json"), hikes: [Hike] = load("hikes.json"), profile:Profile = Profile.default) {
self.landmarks = landmarks
self.hikes = hikes
self.profile = profile
}
}
型
..
然而,当我继续选择A时,我意识到我已经失去了实用函数,它们将不得不分散在代码库中。
这些方法是否同样有效?
1条答案
按热度按时间7nbnzgx91#
Swift Data是关于持久性的,而
ModelData
是关于运行时的应用状态。因此,您将创建单独的
Hike
和Landmark
@Model
实体;这是您的“选项A”