Я изучаю Swift на Udemy, и JSON анализ данных заставляет меня испытывать трудности. Я создал два файла WebService.swift
и OrderListViewModel.swift
. Прежний ... как следует из названия, реализует запрос данных (node.js) от Glitch, а позже реализует View Model. Вот файлы:
`WebService.swift`:
import Foundation
class Webservice {
func getAllOrders(completion: @escaping ([Order]?) -> ()) {
guard let url = URL(string: "https://island-bramble.glitch.me/orders") else {
completion(nil)
return
}
let task = URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, error == nil else {
DispatchQueue.main.async {
completion(nil)
}
return
}
let orders = try? JSONDecoder().decode([Order].self, from: data)
DispatchQueue.main.async {
completion(orders)
}
}.resume()
}
}
Я разумно понимаю, что здесь происходит. Я не могу понять ту часть, которая происходит ниже.
`OrderListViewModel.swift`:
import Foundation
class OrderListViewModel: ObservableObject {
var orders = [OrderViewModel]()
init() {
fetchOrders()
}
func fetchOrders() {
Webservice().getAllOrders { orders in
if let orders = orders {
self.orders = orders.map(OrderViewModel.init)
}
}
}
}
class OrderViewModel {
let id = UUID()
var order: Order
init (order: Order) {
self.order = order
}
var name: String {
return self.order.name
}
var size: String {
return self.order.size
}
var coffeeName: String {
return self.order.coffeeName
}
var total: Double {
return self.order.total
}
}
Как fetchOrders()
извлекает orders
. Более конкретно, как этот блок кода (замыкание) извлекает orders
? В качестве альтернативы, если данные, извлеченные с удаленного сервера, передаются в качестве аргументов параметрам функции обратного вызова, как ниже код извлекает их?
Webservice().getAllOrders { orders in
if let orders = orders {
self.orders = orders.map(OrderViewModel.init)
}