类型'customDataObject'不符合协议'序列'
我想要做的是检索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)
})
}
}
Alt +点击genrePosters?它告诉你吗?它应该说它的ResultsGenrePosters,因为那是什么错误说。现在看看posterArray的类型;它是一个String数组,而不是Array ResultsGenrePosters。我认为你的意思是写作为海报在genrePosters和混淆你自己的类型,因为你写了posterString在genrePosters。
也许你想使用地图将genrePosters转换为[String]?
这将转换你的posterArray,如果它存在一个只包含海报名称的数组中。如果它不存在,你会得到一个空数组。这只适用于如果海报是字符串。如果它的字符串?你应该使用flatMap来代替。
let posterNames = genrePosters.results?.map { $0.poster } ?? [String]()
的我看到你做了什么,我试图做这样的事情:?genrePosters.results [0] .poster]守卫让posterStringArray = 其他{ 打印( “没有这样的项目”) 回报 } 的海报在posterStringArray { 如果posterArray.contains(posterString){继续 }其他{posterArray.append(posterString)} //这是发生错误的地方 } – SwiftyJD
但出现错误:条件绑定的初始化程序必须具有可选类型,而不是'[String?]':Guard let posterStringArray = [genrePosters.results?[0] .poster] – SwiftyJD
我编辑了答案。 –
你的命名是一种单/复数混淆;-) – vadian