当 Codegen 处于 ClassDefinition 或 Category/Extension 中时,如何让 SwiftUI 预览工作?

Posted

技术标签:

【中文标题】当 Codegen 处于 ClassDefinition 或 Category/Extension 中时,如何让 SwiftUI 预览工作?【英文标题】:How do you get SwiftUI Previews to work when Codegen is in ClassDefinition or Category/Extension? 【发布时间】:2020-07-25 20:19:27 【问题描述】:

我有一个使用核心数据和 xcdatamodeld 文件的视图,其中包含 Item 结构的定义。如果我使用 Xcode 为 Item 生成文件并手动管理它们,预览效果很好。但是,当我在其他任何一种形式中使用 Codegen 时,都会收到错误消息,指出整个结构未定义。这会阻止预览工作。

代码:

struct ArchiveView: View 
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    @FetchRequest(entity: Item.entity(), sortDescriptors: []) var fetchedResults: FetchedResults<Item>
    
    var body: some View 
        return NavigationView 
            List(fetchedResults, id: \.self )  (fetchedResult: Item) in
                return PurchaseView(name: fetchedResults.name price: fetchedResults.price, purchaseDate: fetchedResults.date)
            
        .navigationBarTitle("Order")
    

Item+CoreDataClass 和 Item+CoreDataProperties 都丢失了,因为它们是由 xcode 自动生成的。

我现在正在使用手动 Codegen 来查看预览,但我很好奇是否可以使用其他选项。如何在核心数据文件中使用 Class Defintion Codegen 并且仍然能够使用 SwiftUI 预览?

【问题讨论】:

【参考方案1】:

经过一些测试,xcode 代码生成器本身似乎有问题。每当我至少一次将代码生成器更改为除类定义之外的任何内容时,都会中断与预览的链接。

解决方法是创建一个新项目并复制旧文件。

【讨论】:

以上是关于当 Codegen 处于 ClassDefinition 或 Category/Extension 中时,如何让 SwiftUI 预览工作?的主要内容,如果未能解决你的问题,请参考以下文章

Matlab Codegen:不支持匿名函数

从 graphql-codegen 获取类似于 apollo codegen 生成的类型

Rust 编译器结合 Cranelift ,显著缩短调试构建时间

graphql-codegen 没有与配置文件一起运行

为啥 apollo client:codegen 不生成类型?

将 swagger-codegen 项目导入现有的 Android 项目