Swift Decodable问题 - 无法为数组

时间:2018-04-27 04:09:43

标签: ios json swift decodable

我在 self.tvShows = shows.data

上排除此错误时遇到问题

我收到错误无法分配类型' RecentTvListDays'输入' [TvShowDetails]?'

我已将JSON结构附加为底部的图像。希望这已经足够了。

class TvHomeController: UICollectionViewController, UICollectionViewDelegateFlowLayout    {

fileprivate let cellId = "cellId"

var tvShows: [TvShowDetails]? = []

func fetchTvItems()   {

    let jsonUrlString = "https://www.what-song.com/api/air-episodes"
    guard let url = URL(string: jsonUrlString) else
    {return}

    URLSession.shared.dataTask(with: url) { (data, response, err) in

        guard let data = data else {return}

        do {

            let shows =  try
                JSONDecoder().decode(RecentTvListData.self, from: data)

            self.tvShows = shows.data

            DispatchQueue.main.async {
                self.collectionView?.reloadData()
            }

        } catch let jsonErr {
            print("Error serializing JSON", jsonErr)
        }

        }.resume()
    }
}

模型

import UIKit

struct RecentTvListData: Decodable  {
var data: RecentTvListDays
}

struct RecentTvListDays: Decodable {
var RecentTvListByDay: [TvShowDetails]
}

struct TvShowDetails: Decodable   {
var _id: Int
var name: String
}

enter image description here

2 个答案:

答案 0 :(得分:1)

实际上,你似乎几乎就在那里。我相信你只需要换一行:

self.tvShows = shows.data.RecentTvListByDay

就像我在评论中提到的那样,你只是试图设置一个不同的类型(就像错误所说的那样)。

旁注/提示:始终使用小写字母启动变量和属性名称。 (符合惯例并提高可读性)。

答案 1 :(得分:1)

错误很明显,类型不匹配。看看你的代码:

  • 数据源数组tvShows声明为 [TvShowDetails]?
  • 已解码结构中的属性data的结果为 RecentTvListDays

类型不同。这正是错误信息

  

无法指定类型的值' RecentTvListDays'输入' [TvShowDetails]?

告诉你。根据JSON结构,您必须分配

let shows =  try JSONDecoder().decode(RecentTvListData.self, from: data)
self.tvShows = shows.data.RecentTvListByDay