Вы начинаете понимать истинную элегантность Swift, как только начинаете превращать это в обычные объекты, используя Codable
. Это позволит вам делать вещи, как на детской площадке:
import Cocoa
let jsonData = """
{
"details": {
"code": 235,
"school": "sp school",
"students": [
{ "name": "1student", "Active": false },
{ "name": "2student", "Active": true },
{ "name": "3student", "Active": true },
{ "name": "4student", "Active": false },
{ "name": "5student", "Active": false}
]
}
}
""".data(using: .utf8)!
struct Student : Codable {
let name: String
let active: Bool
enum CodingKeys: String, CodingKey {
case name
case active = "Active"
}
}
struct School : Codable {
let code: Int
let school: String
let students: [Student]
}
struct Details: Codable {
let details: School
}
do {
let det = try JSONDecoder().decode(Details.self, from: jsonData)
print(det)
let activeStudents = det.details.students.filter({(student)->Bool in student.active})
print(activeStudents)
} catch {
print(error)
}
Это, очевидно, намного проще для понимания, и XCode может также намного лучше поддерживать вас в процессе. Усилия, затраченные на анализатор, минимальны и легко восстанавливаются благодаря чистой элегантности и четкости конечной линии фильтрации.