iOS:将coredata fetch转换为数组并传递给另一个类

时间:2017-04-02 20:26:02

标签: ios arrays swift core-data

在我班上我有一种从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 
    }

我无法弄清楚如何转换变量数组?

结果(错误)

enter image description here

  

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

1 个答案:

答案 0 :(得分:2)

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

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

最后,您错误地使用了guard;如果它有0项,你试图返回array,否则你会返回一些变量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 
}