gpt4 book ai didi

swift - 如何快速将核心数据管理对象数组转换为 "identifiable"列表? (Xcode 11,测试版 5)

转载 作者:行者123 更新时间:2023-11-28 11:28:41 27 4
gpt4 key购买 nike

如何将使用 Swift/IOS 通过“fetchRequest”从 Core Data 检索到的一组托管对象传输到一个“可识别”的数组?

示例 - 如何使“任务”数组“可识别”

let fetchRequest : NSFetchRequest<Todo> = Todo.fetchRequest()
let tasks = try context?.fetch(fetchRequest)

背景:

  • 在使用“列表”的 SwiftUI 中,您传递给列表的数据数组需要是“可识别的”。
  • 我还注意到 identified(by: .self) 似乎已被弃用。
  • 使用(Xcode 11,Beta 5)
  • 目前正在使用 xcode 自动创建核心数据实体的托管对象,因此最好坚持使用这种方法

最佳答案

使用替换ForEach(Data, id:\.idAttribute)

特征 identified(by: .self) 被新语法取代:

ForEach(filteredGrapes, id: \.id) { grape in
GrapeCell(grape: grape)
}

核心数据示例:

使用名为 ItemStore.xcdatamodeld 的文件和启用了 Generation=Class Definition 定义的实体 ItemDAO 并具有名为 标题

注意:必须Product/Clear Build Folder 然后重启 Xcode 才能使 Xcode11Beta5 找到正确的 key 路径,这似乎是 Xcode11Beta5 中的一个错误。

import Foundation
import SwiftUI
import CoreData

class MyItemStore {
public static func defaultItems() -> [ItemDAO]{
let store = NSPersistentContainer(name: "ItemStore")
store.loadPersistentStores { (desc, err) in
if let err = err {
fatalError("core data error: \(err)")
}
}
let context = store.viewContext
let item = ItemDAO(context: context)
item.title = "hello you"
try! context.save()
return [
item,
item,
]
}
}

struct CoreDataView: View {
let items: [ItemDAO] = MyItemStore.defaultItems()

var body: some View {
VStack{
ForEach(items, id: \.title) { (item: ItemDAO) in
Text(item.title ?? "no title")
}
Text("hi")
}
}
}

通过扩展添加可识别

extension Todo: Identifiable {
public var id: String {
//return self.objectID.uriRepresentation().absoluteString
return self.title!
}
}

手动维护 CoreData 模型以添加Identifiable

在那里你可以像往常一样添加Identifiable,这不是必需的,因为扩展也可以添加 Identifiable。

关于swift - 如何快速将核心数据管理对象数组转换为 "identifiable"列表? (Xcode 11,测试版 5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57405435/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com