Я декодирую musi c API, используя декодируемый протокол.
Простые вещи работают хорошо, и я могу получить их с помощью ключа, однако есть массив жанров внутри массива результатов, у которого нет ключей.
Часть JSON:
"results": [{
"country": "Europe",
"year": "2017",
"format": ["Vinyl", "LP", "Album", "Mispress"],
"label": ["Parkwood Entertainment", "Columbia", "Sony Music", "Sony Music Entertainment", "Sony Music Entertainment International Services GmbH", "Columbia Records", "Columbia Records", "Parkwood Entertainment LLC", "Parkwood Entertainment LLC", "Celebrate Records GmbH", "Celebrate Records GmbH"],
"type": "release",
"genre": ["Electronic", "Rock", "Funk / Soul", "Pop"],
"style": ["Rhythm & Blues", "Soul", "Neo Soul", "Electro", "Punk"],
"id": 10869960,
моей модели в xcode: Здесь я не знаю, что мне нужно определить, если я не У меня нет ключа
struct Results:Codable {
var catno:String?
var country:String?
var id:Int?
var master_id:Int?
var thumb:String?
var title:String?
var genre:[Genre]?
var type:String?
var uri:String?
var year:String?
}
struct Genre:Codable {
}
Моя функция, которую я использую для получения данных из API
private func getRecords(_ searchMethod:String, searchString:String) {
// Check the requested search method and make api call with searchString
var urlString:String = ""
var resultsArray = [Results]()
if searchMethod == "barcode" {
urlString = DiscogsAPI.barcode + searchString + DiscogsAPI.token
}
else if searchMethod == "title" {
urlString = DiscogsAPI.title + searchString + DiscogsAPI.token
}
// Session setup and api call
let url = URL(string: urlString)
guard url != nil else {
return
}
let session = URLSession.shared
let dataTask = session.dataTask(with: url!) { (data, response, error) in
// Peform datatask and handle data
if error == nil && data != nil {
do {
let decoder = JSONDecoder()
let resultsData = try decoder.decode(Record.self, from: data!)
let genreData = try decoder.decode(Genre.self, from: data!)
resultsArray = resultsData.results!
print(resultsArray[0].genre)
DispatchQueue.main.async {
self.delegate?.discogsResult(resultsArray)
}
}
catch {
print("error getting data")
}
}
else {
print("data of error nil")
}
}
dataTask.resume()
}