WWDC2019会议204-将核心数据用于可识别协议的数据源

时间:2019-06-20 16:07:55

标签: swift core-data

在WWDC19会议204上,展示了如何使用Swift 5.1和public function findByValue($value) { $value = '%'.addcslashes($value, '%_').'%'; return $this->createQueryBuilder('u') ->orWhere('u.name like :val1') ->orWhere('u.surname like :val2') ->orWhere('u.email like :val3') ->setParameter('val1', $value) ->setParameter('val2', $value) ->setParameter('val3', $value) ->getQuery() ->getResult(); } 函数来构建UI。 我想使用 Core Data 代替数据文件。 问题在于核心数据实体不符合可识别协议。

我在网上进行了广泛的搜索,并观看了一些核心数据视频,但它们都已经过时了。它们都没有涵盖Swift 5.1和New beta函数(例如List)。

我创建一个带有某些字段(名称,id->是UUID)的实体。 然后,我手动生成如下所示的源文件:

List

AccountsMO+CoreDataClass.swift

import Foundation import CoreData public class AccountsMO: NSManagedObject { }

AccountsMO+CoreDataProperties.swift

这些工作,但是我不能在List中使用它们,因为它们不符合可识别协议。 我假设有某种添加方法,但是无论是在核心数据实体还是在这里都找不到。

我将数据加载到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 } 文件中,并尝试在列表中使用它。根据我的尝试,我得到'无法推断复杂的闭包返回类型;添加明确类型以消除歧义” ,否则我得到了“不符合可识别协议”

2 个答案:

答案 0 :(得分:1)

在您的SwiftUI列表中将Self作为id参数传递

var entries : [AccountsMO]
List(entries, id : \.self) {_ in

}

答案 1 :(得分:0)

来自SwiftUI Tutorials

  

列表可识别数据。您可以通过以下两种方式之一来使数据可识别:通过使用可唯一标识每个元素的属性的键路径调用identified(by :)方法,或使数据类型符合Identifiable协议。

由于AccountsMO类型已经具有可识别协议所需的id属性,因此只需声明符合可识别协议即可。

import SwiftUI

extension AccountsMO: Identifiable {

}