我正在进行一个API调用,但是,响应返回正常。这是一系列youtube链接:

"items": [
  {
   "kind": "youtube#playlistItem",
   "etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/1GDmRHbln92JxGtet7SSiPs9SaY\"",
   "id": "UEw1dHZnblY0RmtqMHdpeFZ0bmNLZklqMEZuZEZmRUpYdS41NkI0NEY2RDEwNTU3Q0M2",
   "snippet": {
    "publishedAt": "2018-10-17T22:37:35.000Z",
    "channelId": "UCf-gdftRGql5XOUd_ZpVnZg",
    "title": "A Republican, Democrat, and Independent Drink Together | Strange Brew | ",
url:www.test url
}
    }
    }
    ]

以下是加载视频的函数:
类视频:UIViewController、UITableViewDelegate、UITableViewDataSource{
var video = [LicenseDetails]()
let recVideos = NSURL(string: RecVideos)





func loadVideos() {
Helpers.showActivityIndicator(activityIndicator, view)

APIManager.shared.recVideos { json in
        if json != nil {
            self.video = []

            print("Lookin In", json)

//            Adds all items into the array list dist then goes through them all.
            if let listDis = json["items"].array {
                print("Looking For Items", listDis)

                for item in listDis {

                    let Video = LicenseDetails(json: item)
                    self.video.append(Video)
                    print("Test: ", self.video)

                }

                Helpers.hideActivityIndicator(self.activityIndicator)

            }
            }
        }
    }

我正试图分析通过LicenseDetail类传入的数据
class LicenseDetails {

    var title: String?
    var url: String?
    var videoId: String?



    init(json: JSON) {

        self.title = json["title"].string
        self.videoId = json["resourceId"]["videoId"].string

    }
}

我不明白为什么我不能用JSON信息中的数据填充listDis数组,然后用LicenseDetail(JSON:JSON)方法解析它。请协助。

最佳答案

首先确保初始化所有存储的属性。您需要将Json数据转换为字符串。我用了快速的方式施展才华。有了amofire,要么就跟你写的一样,要么就这样self.title = json["title"].stringValue

struct LicenseDetails {
    var title: String
    var url: String
    var videoId: String

    init(json: JSON) {
        self.title = json["title"] as! String
        self.url = json["title"] as! String
        self.videoId = json["videoId"] as! String
    }
}

接下来,只将JSON获取部分留给loadVideos()函数,将其余部分移到ViewController并为其设置一个init,如下所示:
class Video: UIViewController, UITableViewDelegate, UITableViewDataSource {
    var videos = [LicenseDetails]()
    required init(json: JSON) throws {
        super.init()
        let listDis = json["items"].array
        self.videos = listDist.map{LicenseDetails(json:$0)}
    }
}

就这样。希望能成功。

07-28 02:36
查看更多