— Общие вопросы:
1. Как бы вы назвали классы для моделей данных и для классов, которые содержат бизнес-логику (properties и functions)?
2. Объясните разницу между class и struct.
3. Как обрабатывать ошибки в сервисе, если он возвращает Result (success или failure)?ли failure)?
— Работа с UI и данными:
1. Как правильно обрабатывать асинхронные операции и обновлять UI из фонового потока? 2. Как вы обеспечиваете безопасный доступ к элементу массива по индексу, чтобы избежать ошибок? 3. Каким образом вы бы реализовали регистрацию UITableViewCell и её переиспользование? 4. Почему важно делать ссылку на self слабой (weak или unowned) при работе с замыканиями, чтобы избежать утечек памяти? 5. Как убедиться, что loadView отрабатывает только один раз при создании контроллера?нтроллера?
— Работа с кодом:
1. Что такое CodingKeys и для чего он используется? 2. Для чего класс помечают как final?al`?
— Задача: Проведите код-ревью, найдите и исправьте ошибки в коде.
import UIKit
import Foundation
class ProductService { func loadProducts(callback: @escaping ([Product]?, Error?) -> Void) { DispatchQueue.global(qos: .background).async { let products: [Product] = // …get products from network callback(products, nil) } }}
class Product: Decodable { let first_name: String}
class ProductViewController: UIViewController, UITableViewDataSource { let tableView = UITableView() var products: [Product] = []
text📋override func viewDidLoad() {
let service = ProductService()
//setup tableView code
service.loadProducts { (products, error) in
if products != nil {
self.products = products!
self.tableView.reloadData()
}
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = products[indexPath.row].first_name
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return products.count
}
}