Не удалось привести значение типа «_SwiftValue» (0x1106695f8) к «NSArray» (0x110112598) - PullRequest
0 голосов
/ 30 мая 2019

Я получаю данные из словаря JSON и добавляю их в переменную [[String: Anyobject]], но когда я пытаюсь поместить извлеченные данные «изображения». как массив [String] в переменной, он печатает ноль, когда я пытаюсь напечатать элементы массива как [String]

var productsDetails = [String: AnyObject]

            guard let response = data else {return}

            if response["success"].boolValue == true , error == nil{

                //cell.titleLabel.text = response["data"]["product"]["title"] as? String
                self.productsDetails.append(response["data"]["product"].dictionary! as [String : AnyObject])

            }
            self.cartTableView.reloadData()

в ячейке табличного представления

    let data = self.productsDetails[indexPath.row]
    cell.titleLabel.text =  "\(data["title"]!)"

    cell.amountLabel.text = "\(data["price"]!)"

    cell.decriptionLabel.text = "\(data["details"]!)"

    let strum :[String] = (data["image"]! as? [String])! // this line is giving error
    print(strum) 

    print(String(describing: type(of: data["image"])))
    return cell

1 Ответ

1 голос
/ 30 мая 2019

Прежде всего, словарь JSON в Swift 3+ никогда не бывает [String:AnyObject], это [String:Any]

Ошибка ясна. data["image"] содержит (Swifty) объект JSON, это упомянутый тип _SwiftValue.

Чтобы получить словарь product, используйте dictionaryObject, который возвращает [String:Any]?

self.productsDetails.append(response["data"]["product"].dictionaryObject!)

И, пожалуйста, не используйте ужасный синтаксис, такой как (data["image"]! as? [String])!, который

принудительно понижает опциональную опцию до опциональной, а затем принудительно разворачивает ее .

Если предполагается, что это необязательное понижение, оно будет условно (data["image"] as? [String]) или принудительно понизить его один раз (data["image"] as! [String])

Примечание: вам предлагается отказаться от SwiftyJSON в пользу Codable. Это встроенный и более эффективный.

...