в симуляторе не показывает View Controller при API запросе
только начинаю изучать Swift и возникла такая проблема.
код API запроса
case noData
}
protocol ApiClient {
func getUsers(completion: @escaping (Result<[User], Error>) -> Void)
}
class ApiClientImpl: ApiClient {
func getUsers(completion: @escaping (Result<[User], Error>) -> Void) {
let session = URLSession.shared
let url = URL(string: "https://jsonplaceholder.typicode.com/users/")!
let request = URLRequest(url: url)
let task = session.dataTask(with: request, completionHandler: { data, response, error in
guard let data = data else {
completion(.failure(ApiError.noData))
return
}
let decoder = JSONDecoder()
do {
let response = try decoder.decode(UsersResponse.self, from: data)
completion(.success(response.data))
} catch(let error) {
completion(.failure(error))
}
})
task.resume()
}
}
код ViewConroller:
@IBOutlet weak var tableView: UITableView!
var users: [User] = []
let apiClient: ApiClient = ApiClientImpl()
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.prefersLargeTitles = true
apiClient.getUsers(completion: {result in
DispatchQueue.main.async {
switch result {
case .success(let users):
self.users = users
self.tableView.reloadData()
case.failure:
self.users = []
self.tableView.reloadData()
}
}
})
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return users.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "UserCell", for: indexPath)
let user = users[indexPath.row]
cell.textLabel?.text = user.name
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let storyboard = UIStoryboard(name: "Main", bundle: .main)
let viewController = storyboard.instantiateViewController(withIdentifier: "UsersDetailsViewController") as! UsersDetailsViewController
let user = users[indexPath.row]
viewController.user = user
navigationController?.pushViewController(viewController, animated: true)
}
}