Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Khi bắt đầu làm iOS, bạn sẽ gặp hai cách xây dựng giao diện: UIKit lâu đời và SwiftUI hiện đại hơn. Mỗi bên đều đang được dùng thật trong công việc. Bài viết giúp bạn hiểu khác biệt và chọn hợp lý cho mục tiêu của mình.
UIKit xuất hiện từ những ngày đầu của iOS. Bạn tạo các đối tượng như UIView, UILabel, UIButton, đặt ràng buộc bố cục (Auto Layout) và cập nhật chúng bằng code mỗi khi dữ liệu đổi. Có thể thiết kế bằng Storyboard hoặc viết hoàn toàn bằng code. Đây là kiểu lập trình mệnh lệnh: bạn chỉ ra từng bước thay đổi giao diện.
let label = UILabel()
label.text = "Xin chào"
label.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)
NSLayoutConstraint.activate([
label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
label.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
SwiftUI mô tả giao diện nên trông thế nào cho một trạng thái dữ liệu nhất định. Khi trạng thái đổi, hệ thống tự cập nhật giao diện. Code ngắn hơn và xem trước trực tiếp trong Xcode.
import SwiftUI
struct CounterView: View {
@State private var count = 0
var body: some View {
VStack(spacing: 16) {
Text("Đã bấm \(count) lần")
.font(.title2)
Button("Tăng") {
count += 1
}
.buttonStyle(.borderedProminent)
}
.padding()
}
}
| Tiêu chí | UIKit | SwiftUI |
|---|---|---|
| Phong cách | Mệnh lệnh | Khai báo |
| Lượng code | Nhiều hơn | Ít hơn |
| Độ trưởng thành | Rất ổn định, kiểm soát chi tiết sâu | Phát triển liên tục, đã đủ cho phần lớn ứng dụng |
| Hỗ trợ phiên bản hệ điều hành | Rộng, cả bản cũ | Phụ thuộc phiên bản iOS tối thiểu bạn nhắm tới |
| Dự án có sẵn | Rất nhiều ứng dụng cũ dùng UIKit | Thường dùng cho dự án mới |
Hai công nghệ không loại trừ nhau. Bạn có thể nhúng view SwiftUI vào ứng dụng UIKit bằng UIHostingController, và nhúng thành phần UIKit vào SwiftUI bằng UIViewRepresentable. Nhờ đó dự án cũ chuyển dần sang SwiftUI từng màn hình thay vì viết lại tất cả.
let host = UIHostingController(rootView: CounterView())
navigationController?.pushViewController(host, animated: true)
Dù chọn bên nào, bạn vẫn cần Swift vững, hiểu vòng đời ứng dụng, mạng, lưu dữ liệu, và các khái niệm như bất đồng bộ với async/await. Phần giao diện chỉ là một lớp, phần còn lại của ứng dụng gần như giống nhau.
Với người mới, SwiftUI là điểm xuất phát hợp lý; UIKit là kỹ năng bổ sung giá trị khi đi làm. Đừng tốn quá nhiều thời gian tranh luận, hãy dựng một ứng dụng nhỏ bằng SwiftUI rồi mở rộng kiến thức theo nhu cầu thực tế.
Điều khiến nhiều người mới lúng túng ở SwiftUI là các thuộc tính bao bọc. @State giữ giá trị cục bộ của một view. @Binding cho view con đọc và sửa giá trị do view cha sở hữu. @StateObject hoặc @State kết hợp macro Observable dùng để tạo và giữ một đối tượng mô hình được quan sát. @Environment đọc giá trị từ môi trường như chế độ sáng tối hay cỡ chữ. Ý tưởng chung là có một nguồn sự thật duy nhất và view chỉ phản ánh nó.
Khi dự án lớn dần, hãy tách view thành các view nhỏ có tên rõ ràng, tránh body dài hàng trăm dòng. Dùng Preview để xem nhanh nhiều trạng thái như dữ liệu rỗng, đang tải và lỗi. Nếu một số tính năng chưa có trong SwiftUI ở phiên bản iOS bạn hỗ trợ, đó là lúc dùng UIViewRepresentable để nhúng thành phần UIKit thay vì từ bỏ hoàn toàn.
Ở UIKit, điều hướng thường qua UINavigationController và các lệnh push, pop tường minh. SwiftUI dùng NavigationStack với danh sách đường dẫn mô tả bằng dữ liệu, nên trạng thái điều hướng cũng là state có thể lưu và khôi phục. Với danh sách, UIKit dùng UITableView hoặc UICollectionView cùng nguồn dữ liệu, còn SwiftUI dùng List hoặc LazyVStack gọn hơn nhưng tùy biến sâu đôi khi cần mẹo. Hiểu những khác biệt này giúp bạn đọc được cả hai loại mã khi đi làm và không bị bất ngờ khi chuyển đổi.
Để có lộ trình học iOS bài bản, bạn có thể xem thêm các khóa học trên codebem.com.
Nguyễn Đình Cường
0 comment