Tuple và Optional là 02 kiểu dữ liệu hoàn toàn mới mà trong Objective C không có. 02 kiểu dữ liệu này sẽ được sử dụng thường xuyên trong lập trình Swift, vì vậy các bạn lưu ý phần này nhé.

Tuple – Bộ giá trị


Như đã giới thiệu trong bài trước, Swift cung cấp cho chúng ta một kiểu dữ liệu mới đó là Tuples. Trong bài này mình sẽ tạm gọi là “bộ/nhóm giá trị” cho các bạn dễ hiểu.

Kiểu dữ liệu Tuple cho phép chúng ta lưu trữ nhiều giá trị bên trong một biến. Nghe có vẻ giống mảng, nhưng đây không phải mảng nhé các bạn. Khi một biến / hằng có kiểu Tuple thì biến / hằng đó chỉ là một biến / hằng giá trị thông thường mà thôi hoàn toàn không phải mảng. Nhưng nhờ khả năng đặc biệt này mà việc lập trình của chúng ta trong Swift được nhẹ nhàng hơn rất nhiều (ví dụ đối với những hàm cần trả về nhiều giá trị thì trước đây chúng ta thường hay làm nhất là trả ra thông qua những tham số đầu vào nhưng bây giờ thì không cần phải như vậy nữa, vì chúng ta đã có Tuple do đó chúng ta có thể trả về như một biến giá trị thông thường).

Các giá trị trong tuple có thể thuộc bất kỳ kiểu dữ liệu nào và không cần phải giống nhau.

Khai báo tuple

●  Ví dụ: khai báo một hằng kiểu tuple và gán vào đó hai giá trị (một số nguyên, một chuỗi) cho hằng này.
Cú pháp tuple
●  Nhận xét:

➠  Chúng ta thấy rằng một tuple được khai báo như biến / hằng thông thường.
➠  Không chỉ định kiểu dữ liệu cho tuple, mà Swift sẽ tự hiểu thông qua giá trị được gán.
➠  Bộ giá trị của một tuple được bao trong cặp dấu ( ).

Truy xuất giá trị của tuple

Để truy xuất giá trị của một bộ giá trị, chúng ta dùng chỉ số để xác định vị trí giá trị muốn truy cập (bắt đầu từ vị trí 0).
Truy xuất tuple
Chúng ta cũng có thể đặt tên cho các giá trị con bên trong một bộ giá trị.
Truy xuất tuple
➠ Lúc này để truy xuất các giá trị con bên trong, chúng ta sử dụng dấu chấm “.”
Truy xuất tuple

Phân tách biến tuple

Chúng ta cũng có thể phân tách một bộ giá trị bất kỳ thành các biến hoặc hằng số riêng biệt.
Phân tác biến tuple
Trong một số trường hợp nếu chỉ cần phân tách một hoặc vài giá trị trong một bộ giá trị và bỏ qua một vài giá trị khác trong bộ giá trị thì chúng ta dùng ký tự gạch dưới (_) để bỏ qua những giá trị không mong muốn.
Phân tách biến tuple


Kiểu dữ liệu Optional


Kiểu dữ liệu Optional là một khái niệm mới trong lập trình iOS. Một biến hoặc hằng số có kiểu dữ liệu Optional có nghĩa biến hoặc hằng số đó được phép gán “rỗng” (mang giá trị nil) hoặc phải có giá trị xác định.
➠ Đối với biến hoặc hằng số thông thường không được phép gán “rỗng” (nil) mà phải có một giá trị xác định. Nếu biến khai báo mà không gán giá trị thì nó vẫn tự tạo giá trị mặc định, ví dụ Int thì mặc định là 0. Còn biến optional thì không gán mặc định là 0 nữa mà sẽ gán là nil.
➠ Thông thường chỉ có thể gán nil cho một lớp đối tượng mà không thể gán nil cho một kiểu dữ liệu cơ bản, nhưng Swift hỗ trợ điều này.
Mục đích của kiểu dữ liệu Optional là giúp người dùng tạo một biến hoặc hằng số được phép rỗng (nil).
➠ Điều này sẽ khá tiện trong việc kiểm tra giá trị. Ví dụ trước đây đối với Int thì ta thường khai báo i:Int = -1 để cho biết hiện tại chưa có vị trí nào trong mảng. Nhưng bây giờ ta có thể gán trực tiếp là nil mà không cần gán giá trị -1 như một biến cờ nữa.
➠ Thực ra cái này không mới mà nó giống lớp đối tượng trong C# được gán null. Thường thì chỉ lớp đối tượng được gán null còn biến số thông thường không được gán null. Nhưng Swift lại hỗ trợ gán null cho biến số dữ liệu thông thường.

 

Khai báo

Để khai báo một biến hoặc hằng số có kiểu dữ liệu Optional, chúng ta thêm ký tự “?” đằng sau kiểu dữ liệu cở sở.
➠ Ví dụ: Khai báo biến Int dạng Optional
khai báo optional
Chúng ta sử dụng và truy xuất giá trị như với biến/hằng thông thường.
➠ Ví dụ: kiểm tra biến index có rỗng hay không với cách thức sau:
kiểm tra biến optional
➠ Trong ví dụ trên, nếu chúng ta kiểm tra biến Int thông thường với nil thì sẽ gặp lỗi. Trường hợp này là biến Optional nên cho phép so sánh với giá trị nil.

Forced Unwrapping

Nếu chắn chắn biến hoặc hằng số luôn có giá trị (không nil) thì thêm ký tự “!” sau tên biến để truy xuất giá trị, lúc này hệ thống sẽ unwrap (mở) biến optional thành biến giá trị thông thường để lấy giá trị.
Unwrapping optional
Tuy nhiên nếu không chắc chắn giá trị sẽ luôn luôn không nil thì không sử dụng ký tự “!” vì lúc này chương trình sẽ gặp lỗi. Còn nếu chắc chắn không nil thì truy xuất trực tiếp giá trị sẽ giúp hệ thống nhẹ nhàng hơn.
➠ Ví dụ:
unwrapping optional

Optional Binding

Dùng cấu trúc if hoặc while để kiểm tra biến Optional.
➠ Ví dụ: sử dụng cấu trúc if để kiểm tra biến Optional có dữ liệu hay không như sau.
Optional Binding
➠ Ví dụ trên có thể được đọc như thế này: “nếu y khác nil, gán giá trị y vào x và thực thi A(x), điều này sẽ đảm bảo rằng x là một đối tượng không nil”.
Chúng ta cũng có thể unwrap nhiều biến Optional với cấu trúc điều kiện so sánh như sau:
Optional Binding


Tổng kết


Trong phần này mình đã trình bày tới các bạn 02 kiểu dữ liệu mới mà swift cung cấp. Nếu các bạn có ý định tìm hiểu một cách nghiêm túc thì nên học kỹ phần này. Bởi lập trình Swift sẽ rất hay sử dụng 02 kiểu dữ liệu này và đặc biệt là Optional. Trong khuôn khổ bài viết có thể có những ý mình chưa diễn đạt hết hoặc còn thiếu sót. Bạn nào có gì thắc mắc thì cứ comment bên dưới bài viết nhé.

0 0 votes
Đánh giá bài viết
2 Góp ý
cũ nhất
mới nhất
Inline Feedbacks
View all comments
Tuan
Tuan
3 năm trước

Int ở đây không phải kiểu dữ liệu cơ bản mà là 1 Wrapper class nên có thể gán nil (hay null) bình thường. Chắc bạn có nhầm lẫn chút.