В iOS экосистеме доступно несколько основных фреймворков для построения пользовательского интерфейса. Рассмотрим каждый из них детально.
Год выпуска: 2008 (с появлением iPhone SDK)
Парадигма: Императивный подход
Язык: Objective-C/Swift
Использование:
let label = UILabel()
label.text = "Hello UIKit"
label.frame = CGRect(x: 20, y: 20, width: 200, height: 40)
view.addSubview(label)
Год выпуска: 2019 (iOS 13+)
Парадигма: Декларативный подход
Язык: Swift-only
Использование:
struct ContentView: View {
var body: some View {
Text("Hello SwiftUI")
.font(.title)
.padding()
}
}
Год выпуска: 2000 (наследник NeXTSTEP)
Парадигма: Императивный подход
Язык: Objective-C/Swift
Использование:
let label = NSTextField()
label.stringValue = "Hello AppKit"
label.frame = NSRect(x: 20, y: 20, width: 200, height: 40)
view.addSubview(label)
Позволяет интегрировать SwiftUI в UIKit и наоборот:
// SwiftUI внутри UIKit
let swiftUIView = ContentView()
let hostingController = UIHostingController(rootView: swiftUIView)
// UIKit внутри SwiftUI
struct UIKitView: UIViewRepresentable {
func makeUIView(context: Context) -> UILabel {
UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
}
func updateUIView(_ uiView: UILabel, context: Context) {
uiView.text = "Integrated UIKit"
}
}
Критерий | UIKit | SwiftUI | AppKit |
---|---|---|---|
Платформа | iOS/tvOS | Все Apple OS | macOS |
Подход | Императивный | Декларативный | Императивный |
Минимальная OS | iOS 2.0 | iOS 13 | macOS 10.0 |
Производит. | Высокая | Средняя | Высокая |
Кастомизация | Полная | Ограниченная | Полная |
Кривая обучения | Умеренная | Низкая | Высокая |
UIKit:
SwiftUI:
AppKit:
Выбор фреймворка зависит от: