【问题标题】:Type '()' cannot conform to 'AccessibilityRotorContent' in Swift?类型“()”不能符合 Swift 中的“AccessibilityRotorContent”?
【发布时间】: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 您能否详细说明.. 有什么代码建议吗?您是否建议更改保存功能?

标签: ios swift swiftui


【解决方案1】:

正如已经建议的那样,您在这里使用了错误的方法。 ForEach 是一个 SwiftUI 构造,用于呈现集合中的多个视图。但是你在这里没有展示任何视图,所以你需要标准的.forEach

results.forEach{
    coreDM.saveResult(title: $0.title ?? "")
}

【讨论】:

    猜你喜欢
    • 2020-12-04
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    相关资源
    最近更新 更多