Hí các bạn, nhân một ngày đẹp trời mình có chút cảm hứng với code Native IOS thì mình đã tìm thấy framework SwiftUI này. Vậy SwiftUI là gì và những khái niệm cơ bản của nó là gì, hãy cùng mình tìm hiểu nhé.

Khái niệm cơ bản


Trước tiên, muốn làm quen ai đó thì mình cũng phải biết họ tên và gốc gác của họ, thì học cái gì thì cũng cần biết nó được định nghĩa như thế nào. Swift UI là một framework dùng để thiết kế giao diện sử dụng trong lập trình iOS và được công bố ở sự kiện WWDC2019.

SwiftUI là một bước phát triển mới giúp lập trình giao diện trực quan hơn. Với các bộ giao diện người dùng cho phép thiết kế giao diện theo cách Declarative. Người dùng sẽ thấy được giao diện mình đang xây dựng sẽ thế nào, hoạt động ra sao và tương tác với nó như thế nào nó được gọi là Live Preview, hoặc người dùng có thể tương tác với giao diện thông qua tính năng Live Action. Đây là điểm khác biệt giúp lập trình viên tiết kiệm được khoảng thời gian build lại app để thấy được sự thay đổi như cách làm truyền thống.

SwiftUI quản lý các thành phần (control) thông qua state, mỗi khi state thay đổi thì UI sẽ thay đổi theo. Với SwiftUI chúng ta có thể xây dựng giao diện cho cả iOS,  MacOS, watchOS hay thậm chí cả tvOS.

SwiftUI là xu thế và là tương lai của lập trình iOS. Nó sẽ là bước phát triển quan trọng trong hệ sinh thái của Apple. Tuy vậy nó vẫn chưa thay thế cho UIKit hoàn toàn, UIKit vẫn có giá trị quan trọng và không thể thay thế.

Declarative Programing

Nếu như bạn đã đọc về SwiftUi thì khái niệm này chắc hẳn sẽ làm bạn suy nghĩ: nó là gì và nó có tầm quan trọng như thế nào trong lập trình SwiftUI.

Declarative Programing sẽ nói với "machine" rằng bạn muốn gì xảy ra và máy tính tính toán thế nào để làm ra nó.
Nó khác biệt với mô hình Imperative Programing mà các lập trình viên đã sử dụng từ cách đây hơn 50 năm:
Imperative Programming: nói với “machine” làm thế nào để giải quyết nó và kết quả bạn muốn là gì.
Imperative sẽ cần chúng ta chỉ ra các bước thực hiện một xử lý, còn Declarative sẽ cho chúng ta cái cần xảy ra


Vậy lợi ích của Declarative sẽ là những gì:

  • Hạn chế thay đổi.
  • Giảm thiểu state side-effect.
  • Code ngắn hơn, dễ hiểu hơn.
  • Dễ dàng mở rộng.

Vậy đối với lập trình SwiftUI, Declarative sẽ được ứng dụng như thế nào:
Thứ nhất, SwiftUI cho phép bạn phát triển ứng dụng khai báo (declarative app). Nó đem lại một trải nghiệm nhanh hơn nhiều so với cách lập trình hay phát triển app truyền thống trước đây (imperative app).

Thứ hai, Declarative app development có nghĩa là bạn phải khai báo cả hai việc một lúc:

  • Giao diện của bạn sẽ trông như thế nào.
  • Dữ liệu mà giao diện của bạn phụ thuộc vào.

Thứ ba, nhiệm vụ của SwiftUI chính là tạo các view khi chúng xuất hiện. Và cập nhật lại chúng khi có sự thay đổi từ phái dữ liệu mà chúng phụ thuộc vào.

SwiftUI vs. UIKit

Phần này mình sẽ nói sự khác nhau cơ bản giữa SwiftUI và UIKit, giúp các bạn có cái nhìn trực quan hơn.

Với UIKit, bạn cài đặt và tạo giao diện với các UI Control cơ bản. Bạn xác định các IBOutlet & IBAction. Khi người dùng có tương tác và có sự thay đổi về mặt dữ liệu, thì bạn phải tự cập nhật là giao diện của ứng dụng.

Bên cạnh đó, nếu như bạn thay đổi tên của các Outlet & Action thì ứng dụng dễ bị crash. Bạn phải tiến hành kết nối lại giữa code và giao diện (từ file *.xib).

Đây là nỗi ám ảnh của biết bao thế hệ dev iOS.

Với SwiftUI, trước tiên bạn cảm nhận được việc tạo giao diện bố cục một cách nhanh chóng. Không quá phức tạp như AutoLayout hay phải tính toán chi tiết như set frame. Mọi thứ bắt đầu từ việc khai báo các view và các dữ liệu ràng buộc chúng. Và khi bạn đã sắp xếp ổn về UI & Data, khi có sự thay đổi dữ liệu phụ thuộc

Giao diện tự động cập nhật theo.

Quan trong, bạn có thể thấy tại Canvas mọi thứ dường như là real-time. Những gì bạn code sẽ auto cập nhật sang View. SwiftUI hỗ trợ nhiều trình hiển thị trong cùng file, giúp bạn tiết kiệm thời gian thiết kế giao diện …

Tổng kết

Trên đây là các phần mình đã tìm hiểu được về SwiftUI. Có thể còn thiếu sót nhiều, nhưng cũng là những khái niệm cơ bản về một trong những xu thế mới của lập trình iOS. Hy vọng bài viết có thể giúp các bạn hình dung được một phần về framework này. Hẹn các bạn ở các bài viết sau, mình sẽ đi vào làm giao diện cho một app iOS cụ thể. Seeya.

Tài liệu tham khảo