2017-11-16 24 views
0

リクエストは2つあります。最初の要求はintの配列を返します。 intの配列内のオブジェクトは一意です。つまり、intに関連付けられた文字列値を持ちます。キーの値を取得するには、もう一度リクエストする必要があります。 2番目のURLリクエストには、最初のURLからのint配列の値があります。私は以下のSWIFT 3.を使用してURLリクエストを作成しようとしています (第URLリクエスト)がコードです:私は、何が起こっている genreLabel.text = "\(fetchMovieGenres(result?.genreIds)!)"文字列と配列の配列を返すUILabel - Swift 3

されています。私はこれをやっているviewDidLoad()

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() 
} 

リモートURLから文字列の配列を返して、それをUILabelに移そうとしています。しかし何らかの理由で、私はそれを達成することができません。

答えて

1

まず、最終的な文字列のコールバックを提供する必要があります。
private func fetchMovieGenres(_ forGenreIds: [Int], callback: (String) -> Void) {

変更:
self.genre = Genre.genreFromResults(results) print(json)
へ:
callback(Genre.genreFromResults(results))

をそして、あなたのメソッド呼び出しを変更Genre.genreFromResults(results)と仮定すると、ラベルのため、ご希望の文字列...

にあなたの方法を変更しています〜へ:

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

+0

質問がリファクタリングされたコードで更新されました。 'タイプの値' [Genre] 'を予想される引数タイプ' String''に変換できません –

+0

'Genre'からどのような文字列を取得するのか分かりません。あなたは自分でそのビットを書く必要があります。 '[String]'で終わることができれば、 'stringArray.joined(separator:"、 ")'と一緒にそれらを連結することができます。 – IanSabine

関連する問題