Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift WWDC2019会话204-使用核心数据作为具有可识别协议的数据源_Swift_Core Data - Fatal编程技术网

Swift WWDC2019会话204-使用核心数据作为具有可识别协议的数据源

Swift WWDC2019会话204-使用核心数据作为具有可识别协议的数据源,swift,core-data,Swift,Core Data,在WWDC19第204课时,演示了如何使用Swift 5.1和List功能构建UI。 我想使用核心数据而不是数据文件。 问题是核心数据实体不符合可识别协议 import SwiftUI extension AccountsMO: Identifiable { } 我在网上进行了广泛的搜索,并观看了一些核心数据视频,但它们都过时了。它们都没有涵盖Swift 5.1和新的测试版功能(如List) 我创建了一个带有一些字段的实体(名称、id->这是一个UUID)。 然后手动生成如下所示的源文件:

在WWDC19第204课时,演示了如何使用Swift 5.1和
List
功能构建UI。 我想使用核心数据而不是数据文件。 问题是核心数据实体不符合可识别协议

import SwiftUI

extension AccountsMO: Identifiable {

}
我在网上进行了广泛的搜索,并观看了一些核心数据视频,但它们都过时了。它们都没有涵盖Swift 5.1和新的测试版功能(如
List

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

AccountsMO+CoreDataClass.swift

import Foundation
import CoreData


public class AccountsMO: NSManagedObject
{

}
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

}
AccountsMO+CoreDataProperties.swift

import Foundation
import CoreData


public class AccountsMO: NSManagedObject
{

}
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

}
<代码>导入基础 导入CoreData 扩展帐户 { @nonobjc公共类func fetchRequest()->NSFetchRequest { 返回NSFetchRequest(entityName:“帐户”) } @NSManaged公共var余额:NSDecimalNumber? @NSManaged公共变量id:UUID @NSManaged公共变量名称:String @NSManaged公共变量类型:Int16 } 这些工作,但我不能在列表中使用它们,因为它们不符合可识别协议。 我假设有某种方法可以添加它,但无论是在核心数据实体中还是在这里,我都找不到它

我将数据加载到
ContentView
文件中,并尝试在列表中使用它。根据我的尝试,我会得到“无法推断复杂的闭包返回类型;添加显式类型以消除歧义”,否则我会得到“不符合可识别协议”。

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

import SwiftUI

extension AccountsMO: Identifiable {

}
因为AccountsMO类型已经具有可识别协议所需的id属性,所以只需声明与可识别协议的一致性

import SwiftUI

extension AccountsMO: Identifiable {

}

在SwiftUI列表中以id参数传递Self

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

}

好的,我已经对我的班级做了。但是使用下面的代码:var body:some View{NavigationView{List(accounts as[AccountsMO]){accounts in accounts Text(“name”)Text(“id”)Text(“type”)Text(“balance”)}.navigationBarTitle(Text(“accounts”)}我遇到“表达式类型不明确,没有更多上下文”错误。我尝试使用account.id,但它说没有这样的值(存在)。objectID是不够的。新创建的对象在保存上下文时其id已更改。使用\。self@malhal完全同意。