iOS:将 coredata 获取的结果转换为数组并传递给另一个类

5 arrays core-data ios swift

在我的课堂上,我有一种从 coredata 中提取数据的方法。但我有一个问题:我需要将结果转换为数组,因为那样我就必须在其他类中使用该数组。

方法是:

    func loadQuestion() -> NSArray{
        let fetchRequest: NSFetchRequest<Questions> = Questions.fetchRequest()

        do {
            let array = try self.context.fetch(fetchRequest) as NSArray
            guard array.count > 0 else { print("[EHY!] Non ci sono elementi da leggere "); return array }

            return array
        } catch let errore {
            print("error FetchRequest")
        }

        return list 
    }
Run Code Online (Sandbox Code Playgroud)

我不知道如何转换变量数组?

结果(错误)

在此输入图像描述

编辑:我写这个是因为我想将 fetch 的结果转换为数组,这样你就可以切换到另一个类

Pau*_*w11 3

fetch 返回一个(可选)数组,因此您所需要做的就是从函数中返回该数组。由于fetch throws您的函数应该或throw至少返回一个可选值,因为获取可能会失败。

在 Swift 中很少需要使用NSArray; 正确键入的 Swift 数组将使您的代码更清晰、更安全。由于 Swift 中的 CoreData 支持泛型,fetch因此将根据您的NSFetchRequest. 即使您从 Objective-C 调用此函数,最好让编译器将 Swift 数组桥接到NSArray您的

最后,你的使用方式guard不正确;array如果它有 0 个项目,您将尝试返回,否则您将返回一些list未在您显示的代码中声明的变量。

func loadQuestion() -> [Questions]? {
    let fetchRequest: NSFetchRequest<Questions> = Questions.fetchRequest()

    do {
        let array = try self.context.fetch(fetchRequest) as [Questions]
        return array
    } catch let errore {
        print("error FetchRequest \(errore)")
    }

    return nil 
}
Run Code Online (Sandbox Code Playgroud)