Можно ли быстро получить массив из CoreData? - PullRequest
0 голосов
/ 03 июня 2019

Я сохранил несколько строк в CoreData (например, имена людей). Теперь я хочу загрузить эти имена в массив.

func loadData() -> Array<String> {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext

    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")

    request.returnsObjectsAsFaults = false




    var test = ""
    var DataArray = [String]()

    do {
       let results = try context.fetch(request)


        if results.count > 0 {

            for result in results as! [NSManagedObject] {

                if let firstusername = result.value(forKey: "username") as? String {
                    test = firstusername
                }
                testArray.append(contentsOf: test)
            }

        }
    } catch  {
        print("Roor")
    }
            print(type(of: test))

            return testArray

}

Я всегда получаю это сообщение об ошибке: метод экземпляра 'append (contentsOf :)' требует, чтобы типы 'String' и 'String.Element' (он же 'Character') были эквивалентными

1 Ответ

1 голос
/ 03 июня 2019

append(contentsOf: ожидает последовательность элементов, вы должны использовать только append(, и вы должны переместить строку добавления в if let тело

if let firstusername = result.value(forKey: "username") as? String {
   testArray.append(firstusername)
}

или если вы хотите добавить пустую строку, если имени нет

testArray.append((result.value(forKey: "username") as? String) ?? "")

Тем не менее, ваш метод содержит много избыточного кода, этого достаточно

func loadData() throws -> Array<String> {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext    
    let request = NSFetchRequest<Users>(entityName: "Users")    
    request.returnsObjectsAsFaults = false        
    let results = try context.fetch(request)
    return results.compactMap{ $0.username } 
}

Возвращает массив имен или передает потенциальную ошибку.

...