【发布时间】:2022-07-23 02:13:21
【问题描述】:
我正在尝试将来自 API 的响应保存在 CoreData..(不确定它是否是最佳位置),但一旦我收到响应,我就会尝试保存它。
为此,我正在尝试 foreach,但遇到错误。
如果存储核心数据的位置正确以及如何消除此错误,需要帮助吗?
类型“()”不能符合“AccessibilityRotorContent”
import Foundation
import CoreData
import SwiftUI
class HomeViewModel: ObservableObject {
@Published var results = [ResultItem]()
let coreDM: PersistenceController = PersistenceController()
func performSearch() {
guard let gUrl = URL(
string: "https://api.artic.edu/api/v1/artworks"
) else { return }
Task {
do {
let (data, _) = try await URLSession.shared.data(from: gUrl)
let response = try JSONDecoder()
.decode(ResponseData.self, from: data)
DispatchQueue.main.async { [weak self] in
self?.results = response.data ?? []
ForEach(self?.results ?? [], id: \.self) { // error here -- Type '()' cannot conform to 'AccessibilityRotorContent'
coreDM.saveResult(title: $0.title ?? "")
}
}
} catch {
print("*** ERROR ***")
}
}
}
}
数据模型
import Foundation
// MARK: - Main Object
struct ResponseData: Codable, Hashable {
let data: [ResultItem]?
}
// MARK: - Result Item
struct ResultItem: Codable, Hashable {
var id: Double?
var title: String?
}
核心数据
func saveResult(title: String) {
let result = Item(context: container.viewContext)
result.title = title
do {
try container.viewContext.save()
}
catch {
print("error")
}
}
func getResult() -> [Item] {
let fetchRequest: NSFetchRequest<Item> = Item.fetchRequest()
do {
return try container.viewContext.fetch(fetchRequest)
}
catch {
return []
}
}
【问题讨论】:
-
这不是 ForEach - 它是可枚举视图的容器,您需要
container.forEach(...)或类似的东西。 -
@Asperi 您能否详细说明.. 有什么代码建议吗?您是否建议更改保存功能?