Trying to saveArray, got error – Cannot convert value of type ‘[Data]’ to expected argument type ‘[Dictionary<String, AnyObject>]’
我正在尝试使用此函数保存从 tableview 添加的数组:
|
1
2 3 4 |
class func saveArray(_ value: [Dictionary<String, AnyObject>], key: String) {
let data = NSKeyedArchiver.archivedData(withRootObject: value) UserDefaults.standard.set(data, forKey: key) } |
下面是我要保存数组的函数:
|
1
2 3 4 5 6 |
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]”
以下是我的数据模型:
数据模型屏幕截图
我是 Swift 新手,希望有人能解释一下问题所在。
- saveArray 具有字典 [Dictionary<String, AnyObject>] 的数组的参数类型,但是您正在传递数据数组 [Data],显然它不起作用,尝试将 [Dictionary<String, AnyObject>] 更改为 [Data]?
- @Tj3n,我已经更改了它,但仍然出现相同的错误
问题在于数据类型,saveArray 函数需要字典 [Dictionary<String, AnyObject>] 类型数组的值参数,但您传递的数据模型对象数组是类型不匹配错误。
解决这个问题:
首先,您不应该使用预定义的关键字来创建您的自定义对象。改用 DataObject:
|
1
2 3 |
struct DataObject {
} |
现在将您的 saveArray 函数更改为:
|
1
2 3 4 |
class func saveArray(_ value: [DataObject], key: String) {
let data = NSKeyedArchiver.archivedData(withRootObject: value) UserDefaults.standard.set(data, forKey: key) } |
和 addItemCat,作用为:
|
1
2 3 4 5 6 |
func addItemCat(items: [DataObject]) {
print(“ITEM:”, items) dataSource.myListTableViewController.myListArr = items self.myListTV.isHidden = false UserDefaultsHelper.saveArray(items, key: Constants.myList.myList) } |
- 谢谢@ankitjayaswal 的解释,我真的很感激 :)
来源:https://www.codenong.com/54702021/
