繁体   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