关于 ios:尝试保存数组,出现错误 – 无法将类型 \\'[Data]\\’ 的值转换为预期的参数类型 \\'[Dictionary]\\’ | 珊瑚贝

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/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?