【发布时间】:2021-10-09 08:49:00
【问题描述】:
我刚刚了解了 Swift 的 CoreData。我已经成功地让它在 SwiftUI 中运行,但无法使用相同的方法在基于 UIKit SwiftUI 的应用程序中运行。切换状态被保留并在纯 SwiftUI 应用程序中工作,所以我假设我可以在基于 UIKit 的 SwiftUI 应用程序中做类似的事情,但切换状态在 UIKit SwiftUI 应用程序中永远不会改变。
我在两个项目中使用相同的实体,属性名称,布尔值,并设置默认值。我的问题是我不能在基于UIKit 的 SwiftUI 应用中使用纯 SwiftUI 应用中的相同代码吗?
import CoreData
struct ContentView: View {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \Item.isOn, ascending: true)], animation: .default)
private var items: FetchedResults<Item>
var body: some View {
VStack {
Toggle("", isOn: Binding<Bool>(
get: { items.first?.isOn ?? true},
set: {
items.first?.isOn = $0
try? viewContext.save()
print("value: \($0)")
}
))
.labelsHidden()
.frame(width: 100, height: 100, alignment: .center)
}
}
}
【问题讨论】:
-
如果您同时发布
AppDelegate(来自 UIKit 版本)和@main struct(来自纯 SwiftUI)的代码,以查看可能缺少的内容,也许它也有助于澄清初始化。 -
也许您更愿意将它们称为:“SwiftUI 应用程序生命周期”和“带有 UIKit 应用程序生命周期的 SwiftUI”,这些可能是更常用的术语。