2017-11-16 4 views
0

두 가지 요청이 있습니다. 첫 번째 요청은 int 배열을 반환합니다. int 배열의 객체는 고유합니다. 의미는 int에 연결된 문자열 값을가집니다. 키 값을 얻으려면 두 번째 요청을해야합니다. 두 번째 URL 요청에는 첫 번째 URL의 int 배열 값이 있습니다. viewDidLoad()에서문자열 배열 채우기 UILabel - Swift 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() 
} 

나는이 일을 오전 : 내가 무슨 일이 일어나고있다 genreLabel.text = "\(fetchMovieGenres(result?.genreIds)!)"

을 (두 번째 URL 요청이) 나는 다음과 신속 3.를 사용하여 URL 요청을하려고하면 코드 원격 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

질문을 리팩터링 한 코드로 업데이트했습니다. '예상되는 인수 유형'String '으로'유형 값 '[Genre]'을 변환 할 수 없습니다. –

+0

'Genre'에서 원하는 문자열을 얻는 방법을 모르겠습니다. . 너 혼자 그 비트를 써야 해. '[String]'으로 끝날 수 있다면'stringArray.joined (separator : ",")'와 함께 연결할 수 있습니다. – IanSabine