С помощью этого решения вы можете декодировать все ваши локализованные имена:
struct Bug: Decodable, Identifiable {
enum CodingKeys: String, CodingKey { case name }
let id = UUID()
var localizedNames: [String: String] = [:]
var nameUSen: String {
localizedNames["name-USen"] ?? "error"
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let names = try container.decode([String: String].self, forKey: .name)
for (key, value) in names {
localizedNames[key] = value
}
}
}
Используйте .sorted { $0.nameUSen < $1.nameUSen }
для сортировки ваших данных:
class FetchBugs: ObservableObject {
@Published var bugs = [Bug]()
init() {
let url = URL(string: "http://acnhapi.com/v1/bugs")!
URLSession.shared.dataTask(with: url) { data, response, error in
do {
if let bugsData = data {
let decodedData = try JSONDecoder().decode([String: Bug].self, from: bugsData)
DispatchQueue.main.async {
self.bugs = Array(decodedData.values).sorted { $0.nameUSen < $1.nameUSen }
}
} else {
print("No data")
}
} catch {
print(error)
}
}.resume()
}
}
И отобразите USen
имя:
struct BugList: View {
@ObservedObject var fetch = FetchBugs()
var body: some View {
VStack {
List(fetch.bugs) { bug in
VStack(alignment: .leading) {
Text(bug.nameUSen)
}
}
}
}
}
Если вы когда-нибудь захотите получить доступ к любому другому имени, вы можете использовать:
bug.localizedNames["name-EUde"]!