在 WWDC19 session 204 上展示了如何使用 Swift 5.1 和List函数构建 UI 。我想使用核心数据而不是数据文件。问题是核心数据实体不符合 Identifiable 协议。
我在网上广泛搜索并观看了几个核心数据视频,但它们都已过时。它们都没有涵盖 Swift 5.1 和新的 beta 功能(如List)。
我创建了一个包含一些字段的实体(名称,id -> 这是一个 UUID)。然后我手动生成如下所示的源文件:
AccountsMO+CoreDataClass.swift:
import Foundation
import CoreData
public class AccountsMO: NSManagedObject
{
}
Run Code Online (Sandbox Code Playgroud)
并且AccountsMO+CoreDataProperties.swift:
import Foundation
import CoreData
extension AccountsMO
{
@nonobjc public class func fetchRequest() -> NSFetchRequest<AccountsMO>
{
return NSFetchRequest<AccountsMO>(entityName: "Accounts")
}
@NSManaged public var balance: NSDecimalNumber?
@NSManaged public var id: UUID
@NSManaged public var name: String
@NSManaged public var type: Int16
}
Run Code Online (Sandbox Code Playgroud)
这些工作,但我不能在 List 中使用它们,因为它们不符合可识别协议。我假设有某种方法可以添加它,但我在核心数据实体或此处都找不到它。
我将我的数据加载到ContentView文件中并尝试在列表中使用它。根据我的尝试,我得到要么'无法推断复杂的闭包返回类型;添加显式类型以消除歧义',或者我得到'不符合可识别协议'。
列表与可识别数据一起使用。您可以通过以下两种方式之一使您的数据可识别:通过使用唯一标识每个元素的属性的关键路径调用identified(by:)方法,或者使您的数据类型符合可识别协议。
由于 AccountsMO 类型已经具有可识别协议所需的 id 属性,只需声明与可识别协议的一致性。
import SwiftUI
extension AccountsMO: Identifiable {
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1384 次 |
| 最近记录: |