Попытка сохранить массив, получена ошибка - невозможно преобразовать значение типа '[Data]' в ожидаемый тип аргумента '[Dictionary]» - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь сохранить массив, добавленный из таблицы, используя эту функцию:

class func saveArray(_ value: [Dictionary<String, AnyObject>], key: String) {
        let data = NSKeyedArchiver.archivedData(withRootObject: value)
        UserDefaults.standard.set(data, forKey: key)
    }

Ниже приведена функция, в которой я хочу сохранить массив:

func addItemCat(items: [Data]) {
        print("ITEM: ", items)
        dataSource.myListTableViewController.myListArr = items
        self.myListTV.isHidden = false
        UserDefaultsHelper.saveArray(items, key: Constants.myList.myList)
    }

Однако яполучил эту ошибку: Невозможно преобразовать значение типа '[Data]' в ожидаемый тип аргумента '[Dictionary String, AnyObject]'

Ниже представлена ​​моя модель данных: screencap модели данных

Я новичок в Swift, и я надеюсь, что кто-то может объяснить, в чем проблема.

1 Ответ

0 голосов
/ 15 февраля 2019

Проблема с типами данных, saveArray функция ожидает параметр значения массива типов словаря [Dictionary<String, AnyObject>], но вы передаете массив объектов модели данных, который является ошибкой несоответствия типов.

Чтобы решить эту проблему:

Во-первых, вы не должны использовать предопределенные ключевые слова для создания вашего пользовательского объекта.Вместо этого используйте DataObject:

struct DataObject {

}

Теперь измените свою saveArray функцию на:

class func saveArray(_ value: [DataObject], key: String) {
    let data = NSKeyedArchiver.archivedData(withRootObject: value)
    UserDefaults.standard.set(data, forKey: key)
}

и addItemCat, действуйте как:

func addItemCat(items: [DataObject]) {
    print("ITEM: ", items)
    dataSource.myListTableViewController.myListArr = items
    self.myListTV.isHidden = false
    UserDefaultsHelper.saveArray(items, key: Constants.myList.myList)
}
...