Contents
Bài viết này sẽ đem tới cho bạn một trải nghiệm về Optional Binding mới trong Swift. Bài viết sẽ không quá phức tạp và mang tính chất vui vẻ là chính. Vâng, chào mừng bạn đến với Fx Studio!
Chuẩn bị
Bạn chỉ cần sử dụng Playgroud là đủ rồi. Quan trong là bạn cần phải nắm được các điểm lý thuyết này trước.
- Closure : Một khối lệnh được bọc lại và truyền đi như một biến.
- Generics: Tái sử dụng lại trong function và với bất kì kiểu dữ liệu nào, thì nó vẫn hoạt động ngon cơm.
- Optional: cho phép biến của bạn được vắng mặt dữ liệu của nó. Dễ hiểu là có thể
nil
. (tham khảo Basic Swift ) - Optional Binding: là cách
unwrap
1 đối tượng Optional một cách an toàn. Tránh việc chết chương trình. - String: là một kiểu dữ liệu. Nó là tập hợp các kí tự (Characters), hay được hiểu là 1 từ hoặc 1 câu.
1. Optional Binding với “If let”
Chúng ta sang phần chính thôi nào! Về Optional
trong Swift, nó cũng như là một cuộc cách mạng lớn. Nó giúp các lập trình viên thoải mái tạo bugs
nhiều hơn. Cũng chính vì đặc tính của nó là có thể nil
. Nên nếu chúng ta không kiểm soát được, thì chương trình bạn chết như ngã rạ.
Và tất nhiên, chúng ta sẽ có cách phòng tránh. Và đây là cách mà bạn sẽ bắt gặp đầu tiên khi học Swift.
Ví dụ code:
let string: String? = "A String" if let str = string { print (str) }
Giải thích:
string
là một biến kiểuOptional String
- Nó được cấp phát giá trị là
"A String"
- Tạo một hằng số là
str
bằng cách gánstring
cho nó - Nếu việc tạo thành công thì sẽ
print
nó ra. Công việc kiểm tra đó được bỏ vào câu lệnh điều kiệnif
Sử dụng lâu dần thì giới lập trình viên Swift gọi luôn công việc trên là If let
. Nhưng tên gọi chính của nó là
Optional Binding
2. The standard implementation of optionals
Tiếp theo, bạn sẽ cùng mình khám phá thêm một chút nữa. Thật sự nó không như cách bạn đã biết. Bạn hãy xem đoạn code sau:
let string: String? = nil switch string { case .some(let val): print (val) case .none: print ("this is nil") }
Đây mới là bản chất thực sự của nó. Một đối tượng Optional sẽ trả về cho chúng ta 2 trường hợp:
.some
là có.none
là không có
Suy cho cùng thì số lượng kí tự code nhiều hơn If let
,nên chắc mọi người không sử dụng nó. Lâu dần thì xem như em đó không tồn tại nữa rồi.
3. Implementing for Strings
OKAY! Giờ tới phần trở nên PRO
hơn một xí. Ta có ý tưởng sau:
Tạo 1 function
If let
với cách xử lí Optional Binding mới kia.
Bạn tiếp tục tham khảo đoạn code sau:
func iflet(_ value: String?, thenFunc: (String) -> (), elseFunc: @escaping () -> ()) { switch value { case .some(let val): thenFunc(val) default: elseFunc() } }
Vẫn không có gì phức tạp. Ngoài việc, ta thêm 2 closure
là 2 tham số để xử lí mà thôi. Xem tiếp cách sử dụng nào
let string: String? = nil iflet(string, thenFunc: {val in print(val)}, elseFunc: { print("Do else") } ) iflet("valueString", thenFunc: {val in print(val)}, elseFunc: { print("Do else") } )
Nhìn qua thì cũng ngon lành phải không nào. Giờ bạn có thể khai báo nó thành 1 static function
và dùng trong project của bạn. Hoặc biến nó thành 1 function trong extension
cho một Class nào đó.
4. Implementing a Generic
Ở trên, chúng ta đang dùng với kiểu dữ liệu String
. Tất nhiên, Optional không buông tha kiểu dữ liệu nào hết. Vì vậy, cần thêm một bước cuối cùng là nâng cấp function đó một lần nữa.
Generics sẽ là lựa chọn tiếp theo.
Bạn tham khảo tiếp đoạn code cải tiến function iflet
của chúng ta.
func iflet<T>(_ value: T?, thenFunc: (T) -> (), elseFunc: @escaping ()-> ()) { switch value { case .some(let val): thenFunc(val) default: elseFunc() } }
Thay vì cố định 1 kiểu String
, chúng ta sẽ dùng <T>
và xem T
tương tự như String
. Mọi thứ còn lại sẽ không thay đổi nhiều. Bạn xem cách sử dụng với các kiểu dữ kiệu khác nhau:
let string: String? = nil iflet(string, thenFunc: {val in print(val)}, elseFunc: { print("Do else") } ) iflet("valueString", thenFunc: {val in print(val)}, elseFunc: { print("Do else") } ) let temp: Int? = nil iflet(temp, thenFunc: {val in print(val)}, elseFunc: { print("Do else") } )
OKAY! Trông xịn xò hơn rồi đó. Tới đây thì mình xin kết thúc bài viết này.
Tạm kết
- Optional Binding theo phong cách của riêng bạn
- Hiểu thêm một cách nữa trong Optional Binding
Cảm ơn bạn đã đọc bài viết này!
And Happy coding!
Related Posts:
Written by chuotfx
Hãy ngồi xuống, uống miếng bánh và ăn miếng trà. Chúng ta cùng nhau đàm đạo về đời, về code nhóe!
Leave a Reply Cancel reply
Fan page
Tags
Recent Posts
- Charles Proxy – Phần 1 : Giới thiệu, cài đặt và cấu hình
- Complete Concurrency với Swift 6
- 300 Bài code thiếu nhi bằng Python – Ebook
- Builder Pattern trong 10 phút
- Observer Pattern trong 10 phút
- Memento Pattern trong 10 phút
- Strategy Pattern trong 10 phút
- Automatic Reference Counting (ARC) trong 10 phút
- Autoresizing Masks trong 10 phút
- Regular Expression (Regex) trong Swift
You may also like:
Archives
- September 2024 (1)
- July 2024 (1)
- June 2024 (1)
- May 2024 (4)
- April 2024 (2)
- March 2024 (5)
- January 2024 (4)
- February 2023 (1)
- January 2023 (2)
- November 2022 (2)
- October 2022 (1)
- September 2022 (5)
- August 2022 (6)
- July 2022 (7)
- June 2022 (8)
- May 2022 (5)
- April 2022 (1)
- March 2022 (3)
- February 2022 (5)
- January 2022 (4)
- December 2021 (6)
- November 2021 (8)
- October 2021 (8)
- September 2021 (8)
- August 2021 (8)
- July 2021 (9)
- June 2021 (8)
- May 2021 (7)
- April 2021 (11)
- March 2021 (12)
- February 2021 (3)
- January 2021 (3)
- December 2020 (3)
- November 2020 (9)
- October 2020 (7)
- September 2020 (17)
- August 2020 (1)
- July 2020 (3)
- June 2020 (1)
- May 2020 (2)
- April 2020 (3)
- March 2020 (20)
- February 2020 (5)
- January 2020 (2)
- December 2019 (12)
- November 2019 (12)
- October 2019 (19)
- September 2019 (17)
- August 2019 (10)