在WWDC19第204次会议上,我们展示了如何使用Swift 5.1和List
函数构建UI。我想使用 * Core Data * 而不是拥有数据文件。问题是核心数据实体不符合Identifiable协议。
我在网上搜索了很多,看了几个核心数据视频,但都过时了,没有一个涉及Swift 5.1和新的beta函数(比如List
)。
我创建了一个带有一些字段的实体(name,id-〉这是一个UUID),然后手动生成如下所示的源文件:
- x一个月两个月一个月:**
import Foundation
import CoreData
public class AccountsMO: NSManagedObject
{
}
以及**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
}
这些可以工作,但我不能在List中使用它们,因为它们不符合Identifiable协议。我假设有某种方法可以添加这些,但我找不到它,无论是在核心数据实体中还是在这里。
我在ContentView
文件中加载了我的数据,并尝试在列表中使用它。根据我的尝试,我得到了 '无法推断复杂闭包返回类型;添加显式类型以消除""的歧义,或者我得到的""不符合可标识协议""。
3条答案
按热度按时间yh2wf1be1#
从SwiftUI Tutorials开始
列表使用可标识数据。您可以使用以下两种方法之一来标识数据:通过调用identified(by:)方法,该方法带有指向唯一标识每个元素的属性的键路径,或者通过使数据类型符合Identifiable协议。
由于AccountsMO类型已经具有可识别协议所需的id属性,因此只需声明符合可识别协议。
jk9hmnmh2#
在SwiftUI列表中将Self作为id参数传递
xqk2d5yq3#
Core Data代码生成器将对象声明为可标识的(至少在Xcode 14中),因为Core Data对象有自己的ObjectIdentifier。
账户MO+核心数据属性.swift:
如果手动写入Core Data文件,则可以执行相同的操作。