gpt4 book ai didi

ios - 如何使用 CoreData 实例化 UIHostingController?

转载 作者:行者123 更新时间:2023-12-01 16:19:46 33 4
gpt4 key购买 nike

作为一名长期的 Obj-C 开发者(从 iPhone OS 2 开始),我认为 SwiftUI 是使用 Swift 的插入力! ¯\(ツ)/¯因此,我仍在努力理解一种语言为何在代码中如此类型模糊,而在编译器中却如此迂腐!!!

竭尽全力让 Swift/SwiftUI 实例化一个 UIHostingController<>,以便与 CoreData 一起使用

class MyCoreDataHostingController : UIHostingController<MyCoreDataView> {

required init?(coder: NSCoder) {//Instantiate From Storyboard
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let contentView = MyCoreDataView().environment(\.managedObjectContext, context)
super.init(coder: coder, rootView: contentView)
//Cannot convert value of type 'some View' to expected argument type 'MyCoreDataView'
}
}

struct MyCoreDataView: View {
var body: some View {
Text("Core Data View")
}
}

我如何强制 Swift 推断出正确/适当的类型?

到目前为止我尝试了什么。

5 let contentView = MyCoreDataView()

编译/运行,但不包括 CoreData。

6 super.init(coder: coder, rootView: contentView as! MyCoreDataView)

编译,但在实例化时崩溃。

Could not cast value of type 'SwiftUI.ModifiedContent<MyHostingController.MyCoreDataView, SwiftUI._EnvironmentKeyWritingModifier<__C.NSManagedObjectContext>>' (...)to 'MyHostingController.MyCoreDataView' (...).

... 或者这根本不可能? (还)

最佳答案

这是最快的脑海中解决方案 - 只需使用 AnyView 类型橡皮擦。

注意:任何 View 修饰符都会创建(通常可以创建)不同类型的 View ,这就是编译器在您的情况下提示的原因 - 类型不同。

class MyCoreDataHostingController : UIHostingController<AnyView> {

required init?(coder: NSCoder) {//Instantiate From Storyboard
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let contentView = MyCoreDataView().environment(\.managedObjectContext, context)
super.init(coder: coder, rootView: AnyView(contentView))
}
}

关于ios - 如何使用 CoreData 实例化 UIHostingController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63504070/

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