2017-02-03 2 views
0

내가하려는 것은 배열 형식의 json 데이터를 검색하고 이동하는 경우 로컬 데이터에 데이터가 이미 포함되어 있는지 확인하는 것입니다. 배열에 포함되지 않은 값이 될 때까지 JSON 데이터의 다음 값을 on으로 설정 한 다음 배열에 추가합니다. 배열의이 데이터는 순서대로 있어야합니다. 나는 오류를 지금이 작업을 수행하지만, 얻을하려고 해요 :'customDataObject'유형이 'Sequence'프로토콜을 준수하지 않습니다.

Type 'ResultsGenrePosters' does not conform to protocol 'Sequence'

이는 모습입니다 : + genrePosters 클릭하고 그것이 무엇을 말해 주는가

public struct ResultsGenrePosters: Decodable { 

    public let results : [GenrePosters]? 

    public init?(json: JSON) { 
    results = "results" <~~ json 
    } 
} 


public struct GenrePosters: Decodable { 

    public let poster : String 

    public init? (json: JSON) { 

    guard let poster: String = "poster_path" <~~ json 
    else {return nil} 
    self.poster = poster 
    } 

    static func updateGenrePoster(genreID: NSNumber, urlExtension: String, completionHandler:@escaping (_ details: [String]) -> Void){ 

    var posterArray: [String] = [] 

    let nm = NetworkManager.sharedManager 

    nm.getJSONData(type:"genre/\(genreID)", urlExtension: urlExtension, completion: { 
     data in 

     if let jsonDictionary = nm.parseJSONData(data) 
     { 
     guard let genrePosters = ResultsGenrePosters(json: jsonDictionary) 

      else { 
      print("Error initializing object") 
      return 
     } 
     guard let posterString = genrePosters.results?[0].poster 

      else { 
      print("No such item") 
      return 
     } 

     for posterString in genrePosters { 

      if posterArray.contains(posterString){continue 
      } else { posterArray.append(posterString) } //This is where the error happens 

     } 
     } 
     completionHandler(posterArray) 
    }) 
    } 

} 
+0

당신의 이름은이 같은 일을 시도, 당신이에지고있는 것을 볼 단수/복수의 혼란 ;-) – vadian

답변

0

Alt 키? 그것은 ResultsGenrePosters를 말해야합니다. 왜냐하면 오류가 무엇인지 말하는 것이기 때문입니다. 이제 posterArray 유형을 살펴보십시오. Array의 ResultGenrePosters가 아닌 String의 배열입니다. 제이크 포스터에 을 쓰고 genrePosters에 posterString에 을 썼기 때문에 형식에 대해 혼동 스러울 것입니다.

지도를 사용하여 genrePosters를 [문자열]로 변환하고 싶습니까?

포스터 이름이 포함 된 배열에 posterArray가있는 경우 변형됩니다. 존재하지 않으면 빈 배열이됩니다. 이것은 포스터가 String 인 경우에만 작동합니다. 문자열이라면? 대신에 flatMap을 사용해야합니다.

let posterNames = genrePosters.results?.map { $0.poster } ?? [String]() 
+0

의 종류 : [? genrePosters.results [0] .poster] posterStringArray =하자 가드 다른 { 인쇄 ("그런 항목") 반환 } posterStringArray { 이 posterArray.contains (posterString) {계속이 가} 다른 {posterArray.append (posterString가)} // 이것은 경우에 포스터 오류가 발생한 곳 } – SwiftyJD

+0

하지만 오류가 발생합니다 : 조건부 바인딩을위한 초기화 프로그램은 라인에 '[String?]'이 아닌 Optional 타입을 가져야합니다 : guard let posterStringArray = [genrePosters.results? [0] .poster] – SwiftyJD

+0

나는 대답을 편집했습니다. –

관련 문제