Skip to content

Dashboard

So sánh ưu vào nhược điểm của SwiftUI và UIKit trong iOS

Created by Admin

UIKit

Chắc hẳn với ae lập trình iOS thì UIKit đã quá đỗi quen thuộc vì đây là framework do Apple cung cấp giúp cho việc xây dựng giao diện trở lên trực quan, dễ dàng tuy nhiên sau mỗi lần chỉnh sửa ta đều phải khởi chạy lại để kiểm tra quá trình sửa vừa rồi đã đúng chưa vì vậy sẽ gây mất tương đối nhiều thời gian cho việc build và run.

SwiftUI

SwiftUI là một UI Framework mới so Apple phát triển. SwiftUI dùng để thiết kế giao diện một cách trực quan với việc khi thêm một component vào trong giao diện, chúng ta có thể thấy ngay kết quả nhờ tính năng Live Preview hoặc tương tác trực tiếp bằng tính năng Live action. Việc này giúp tiết kiệm rất nhiều thời gian so với truyền thống khi sử dụng UIKit, chúng ta phải khởi chạy và đi vào chính xác màn hình chúng ta đang thao tác để xem kết quả. Các control trong SwiftUI được chia ra thành từng component, khi xây dựng giao diện chúng ta chỉ cần kết hợp từng component này lại với nhau. Đặc biệt hơn, với SwiftUI có thể làm việc được trên tất cả các Apple platforms: iOS, iPadOS, watchOS và tvOS!

Ưu điểm của SwiftUI

  • SwiftUI khá đơn giản, dễ học và Code của nó khá là gọn gàng.
  • Trong quá trình phát triển có thể kết hợp cả UIKit và SwiftUI với nhau.
  • Có thể dể dàng quản lý chủ đề cho App, đặt làm mặc định chủ đề cho App.
  • Cung cấp Preview giao diện trực tiếp của màn hình cho người dùng viết Code mà không cần phải khởi chạy Simulator hoặc Device để kiểm tra, xem lại kết quả như trước.
  • Vì không sử dụng InterfaceBuilder, được thay thế bởi Canvas nên khi Code sẽ được thêm tự động nếu kéo vào màn hình Preview.
  • Không còn bị crash App khi quên kéo IBOutlet cho UI màn hình nữa.
  • SwiftUI sử dụng các bố cục VStack, ZStack, HStack, Groups, Lists ... thay thế cho Autolayout vì vậy bố cục luôn được khởi tạo trước và chính vì không sử dụng Storyboard nên nó tạo thuận lợi cho việc quản lý Code khi làm việc nhóm.

Nhược điểm của SwiftUI

  • Vì SwiftUI yêu cầu iOS 13 trở lên vì vậy các thiết bị sử dụng iOS thấp hơn sẽ không hỗ trợ, tuy nhiên việc này cũng không quá đáng ngại vì nếu bạn xem các bảng thống kê sử dụng của Apple thì hiện số lượng người sử dụng iOS 13 đã chiếm trên 80% từ tháng 6/2020.

  • Vì swiftUI còn mới vì vậy khi gặp các vấn đề phát sinh thì việc tham khảo qua các trang nổi tiếng như StackOverFlow cũng sẽ khó timf được câu trả lời, hay một số vấn đề tính ổn định mà Framework này gặp phải cũng đang dần được Apple cải thiện và sửa lỗi.

Một số câu hỏi thường gặp về SwiftUI

SwiftUI là gì? Là một framework được Apple xây dựng giao diện cho iOS, MacOS, tvOS và watchOS. SwiftUI được đánh giá là tương lai cho việc xây dựng UI trong iOS

SwiftUI support từ iOS bao nhiêu? SwiftUI support từ iOS 13, macOS 10.15, tvOS 13 và watchOS 6.

Có thể sử dụng chung SwiftUI và UIKit trong việc phát triển ứng dụng không? Chúng ta hoàn toàn có thể sử dụng các control của UIKit từ SwiftUI và ngược lại việc này dẫn tới tính tương thích tốt hơn với các hệ thống cũ.

Liệu SwiftUI có thay thế UIKit? Vì nhiều thành phần của SwiftUI được build trực tiếp từ UIKit, ví dụ như UITableView, một số thì render bởi SwiftUI. Ngoài ra thì Apple vẫn tiếp tục giới thiều rất nhiều function UIKit mới ở WWDC, thế chúng ta vẫn tiếp tục làm việc với cả hai

Kết Luận

SwiftUI đang trở thành một xu hướng mới vì nó đem lại sự đơn giản trong quá trình Code và tốc độ xây dựng ứng dụng nhanh hơn so với UIKit. Tuy nhiên SwiftUI vẫn chưa đủ khả năng thay thế hoàn toàn được UIKit. Nếu so sánh SwiftUI với UIKit ở thời điểm hiện tại thì đang có một cách biệt lớn bởi vì khi gặp những rắc rối hay các vấn đề phức tạp thì Stackoverflow, Medium, Hackingswift, ...

Cám ơn bạn đã dành thời gian cho bài viết!

Nguồn: https://developer.apple.com/xcode/swiftui/ https://steelkiwi.medium.com/swiftui-vs-uikit-benefits-and-drawbacks-6a540cced684#:~:text=SwiftUI%20is%20a%20completely%20new,SwiftUI%20is%20completely%20software%2Dbased.

Source: https://viblo.asia/p/so-sanh-uu-vao-nhuoc-diem-cua-swiftui-va-uikit-trong-ios-LzD5daMdKjY