在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
}
文件中,并尝试在列表中使用它。根据我的尝试,我得到'无法推断复杂的闭包返回类型;添加明确类型以消除歧义” ,否则我得到了“不符合可识别协议” 。
答案 0 :(得分:1)
在您的SwiftUI列表中将Self作为id参数传递
var entries : [AccountsMO]
List(entries, id : \.self) {_ in
}
答案 1 :(得分:0)
列表可识别数据。您可以通过以下两种方式之一来使数据可识别:通过使用可唯一标识每个元素的属性的键路径调用identified(by :)方法,或使数据类型符合Identifiable协议。
由于AccountsMO类型已经具有可识别协议所需的id属性,因此只需声明符合可识别协议即可。
import SwiftUI
extension AccountsMO: Identifiable {
}