2017-02-03 150 views
0

我想要做的是檢索json數據(數組格式)並檢查我的本地數組是否已經包含數據,如果它移動直到JSON數據中的下一個值,直到它們是數組不包含的值,然後將其附加到數組。數組中的這些數據必須按順序排列。我試圖做到這一點,但現在得到的錯誤:類型'customDataObject'不符合協議'序列'

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

這是什麼樣子:

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 +點擊genrePosters?它告訴你嗎?它應該說它的ResultsGenrePosters,因爲那是什麼錯誤說。現在看看posterArray的類型;它是一個String數組,而不是Array ResultsGenrePosters。我認爲你的意思是寫作爲海報在genrePosters和混淆你自己的類型,因爲你寫了posterString在genrePosters

也許你想使用地圖將genrePosters轉換爲[String]?

這將轉換你的posterArray,如果它存在一個只包含海報名稱的數組中。如果它不存在,你會得到一個空數組。這隻適用於如果海報是字符串。如果它的字符串?你應該使用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?]':Guard let posterStringArray = [genrePosters.results?[0] .poster] – SwiftyJD

+0

我編輯了答案。 –

相關問題