尝试保存数组时出现错误 - 无法将类型“[Data]”的值转换为预期的参数类型“[Dictionary<String, AnyObject>]”
Trying to saveArray, got error - Cannot convert value of type '[Data]' to expected argument type '[Dictionary<String, AnyObject>]'
我正在尝试使用此函数保存从表视图添加的数组:
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 ]”
下面是我的数据模型:
data model screencap
我是 Swift 的新手,希望有人能解释一下问题所在。
问题出在数据类型上,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)
}
我正在尝试使用此函数保存从表视图添加的数组:
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 ]”
下面是我的数据模型: data model screencap
我是 Swift 的新手,希望有人能解释一下问题所在。
问题出在数据类型上,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)
}