Ответ
Да, есть опыт разработки на UIKit.
Основные компетенции:
- Компоненты: Работа с
UIViewController,UIView,UITableView,UICollectionView,UILabel,UIButtonи другими. - Жизненный цикл: Понимание и обработка событий жизненного цикла
UIViewController(viewDidLoad,viewWillAppearи т.д.). - Автолейаут: Верстка интерфейсов с использованием
NSLayoutConstraint,UIStackViewи фреймов. - Протоколы и делегаты: Реализация
UITableViewDataSource,UITableViewDelegate,UICollectionViewDelegateFlowLayoutи пользовательских делегатов. - Анимации: Использование
UIView.animate(withDuration:)и Core Animation.
Пример кода (UITableView с кастомной ячейкой):
class ItemsViewController: UIViewController {
private let tableView = UITableView()
private var items = ["Элемент 1", "Элемент 2", "Элемент 3"]
override func viewDidLoad() {
super.viewDidLoad()
setupTableView()
}
private func setupTableView() {
view.addSubview(tableView)
tableView.frame = view.bounds
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
tableView.dataSource = self
}
}
extension ItemsViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = items[indexPath.row]
return cell
}
}
Почему UIKit? Это зрелый, императивный фреймворк, предоставляющий полный контроль над интерфейсом и жизненным циклом, что критически важно для поддержки legacy-кода и сложных, высоконагруженных экранов.
Ответ 18+ 🔞
А, UIKit, говоришь? Да, конечно, есть, блядь, опыт. Это ж как старый, проверенный друг, который может и в рыло дать, если неправильно с ним обращаться.
Что я там понаделал, епта:
- Вся эта хрень:
UIViewController,UIView,UITableView,UICollectionView— с ними на короткой ноге. Кнопки, лейблы — да хули там, обычное дело. - Жизненный цикл: О, это святое, блядь. Знаю, когда
viewDidLoadприходит, а когдаviewWillAppearнагрянет. Не попасть бы в просак, когда вьюха уже на экране, а данные ещё нихуя не пришли. - Автолейаут: Верстал и констрейнтами (
NSLayoutConstraint), иUIStackView— эта штука, блядь, иногда жизнь упрощает, а иногда такую дичь творит, что волосы дыбом. И да, старым-добрым фреймам тоже место знаю. - Делегаты с протоколами:
UITableViewDataSource,UITableViewDelegate— это как два полушария одного мозга, блядь. Без одного второе — просто кусок мяса. Кастомные делегаты тоже пилил, когда нужно было пообщаться между контроллерами. - Анимации: Ну,
UIView.animate(withDuration:)— это как базовый камасутра. Иногда, конечно, приходилось лезть в Core Animation, когда нужно было что-то поизвращенней.
Вот, смотри, кусок кода, чтоб не на словах (таблица с ячейками):
class ItemsViewController: UIViewController {
private let tableView = UITableView()
private var items = ["Элемент 1", "Элемент 2", "Элемент 3"]
override func viewDidLoad() {
super.viewDidLoad()
setupTableView()
}
private func setupTableView() {
view.addSubview(tableView)
tableView.frame = view.bounds
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
tableView.dataSource = self
}
}
extension ItemsViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = items[indexPath.row]
return cell
}
}
А почему UIKit, спрашиваешь? Да потому что это, блядь, фундамент. Фреймворк, который не прячет от тебя ни хуя. Хочешь контролировать каждый пиксель, каждый чих жизненного цикла, особенно когда ворочаешь legacy-кодом, который видел виды, или делаешь экран, где анимаций и данных — овердохуища? Тут без полного контроля — просто пиздец. SwiftUI — это, конечно, красиво и модно, но когда нужно залезть в самую жопу и всё сделать по-своему, старина UIKit не подводит.