[英]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.