返回字符串数组并填充 UILabel - Swift 3

Returning an array of string and populate UILabel - Swift 3

有两个请求。第一个请求 returns 一个 int 数组。 int 数组中的对象是唯一的。意思是,它有一个与 int 关联的字符串值。要获取密钥的值,我必须发出第二个请求。第二个 URL 请求具有第一个 URL 的 int 数组的值。 (第二个 URL 请求)我正在尝试使用 swift 发出 URL 请求 3. 以下是代码:

func fetchMovieGenres(_ forGenreIds: [Int], callback: @escaping (String) -> Void) {
    let params = [ API: APIKey ]
    var request = URLRequest(url: urlBuilder.tmdbURLBuilder(params as [String: Any], withPathExtension: MovieGenreList))
    request.addValue("application/json", forHTTPHeaderField: "Accept")

    let task = urlBuilder.session.dataTask(with: request) {(data, response, error) in
        do {
            if let data = data, let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any], let results = json["genre"] as? [[String:Any]] {
                callback(Genre.genreFromResults(results)) // Cannot convert value of type '[Genre]' to expected argument type 'String'
            }
        } catch {
            print("Error parsing JSON: \(error)")
        }
    }
    task.resume()
}

viewDidLoad() 我这样做: genreLabel.text = "\(fetchMovieGenres(result?.genreIds)!)"

发生的事情是,我正在尝试 return 来自远程 URL 的字符串数组并将其填充到 UILabel 中。但出于某种原因,我无法实现。

首先,您需要为最终字符串提供回调。假设 Genre.genreFromResults(results) 是您想要的标签字符串...

将您的方法更改为:
private func fetchMovieGenres(_ forGenreIds: [Int], callback: (String) -> Void) {

变化:
self.genre = Genre.genreFromResults(results) print(json)
至:
callback(Genre.genreFromResults(results))

并将您的方法调用更改为:

fetchMovieGenres(ids) { string in genreLabel.text = string }