簡體   English   中英

類型“ customDataObject”不符合協議“序列”

[英]Type 'customDataObject' does not conform to protocol 'Sequence'

我想做的是檢索json數據(采用數組格式),並檢查本地數組是否已包含該數據,如果它確實移至JSON數據中的下一個值,直到它們是一個數組不包含,然后將其附加到數組。 數組中的此數據必須是有序的。 我現在嘗試執行此操作,但收到錯誤消息:

類型“ ResultsGenrePosters”不符合協議“序列”

看起來是這樣的:

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

}

Alt +單擊genrePosters,它告訴您什么? 它應該說它的ResultsGenrePosters,因為那是錯誤的意思。 現在看看posterArray的類型; 它是一個字符串數組,而不是Array ResultsGenrePosters。 我認為您的意思是在genrePosters中為poster編寫代碼 ,並對類型感到困惑,因為您在genrePosters中為posterString編寫了代碼

也許您想使用map將genrePosters轉換為[String]?

如果您的posterArray存在,則將其轉換為僅包含發布者名稱的數組。 如果不存在,則會得到一個空數組。 這僅在發帖人為String時有效。 如果是String? 您應該改用flatMap。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM