Làm chủ Swift với: Enumeration, Closures, Generics, Protocol và High Order Functions (Phần 1)

Cập nhật ngày: 30/11/2021 - Đã có 773 lượt xem bài viết này!
Làm chủ Swift với: Enumeration, Closures, Generics, Protocol và High Order Functions (Phần 1)
Chào mừng đến với series "Làm chủ Swift". Ở đây, chuỗi bài viết này sẽ hướng dẫn các bạn về Swift, chứ không phải iOS như thường lệ. Chúng ta sẽ cùng nhau khám phá một vài điểm hay, kỹ thuật mà bạn có thể áp dụng để lập trình tốt hơn. Swift được thiết kế với cấu trúc an toàn, trong sáng và chúng ta sẽ tận dụng một vài tính năng đặc biệt của Swift để đạt được mục tiêu này.

Làm chủ Swift với: Enumeration, Closures, Generics, Protocol và High Order Functions (Phần 1)

Chào mừng đến với series "Làm chủ Swift". Ở đây, chuỗi bài viết này sẽ hướng dẫn các bạn về Swift, chứ không phải iOS như thường lệ. Chúng ta sẽ cùng nhau khám phá một vài điểm hay, kỹ thuật mà bạn có thể áp dụng để lập trình tốt hơn. Swift được thiết kế với cấu trúc an toàn, trong sáng và chúng ta sẽ tận dụng một vài tính năng đặc biệt của Swift để đạt được mục tiêu này.

Để bắt đầu, hãy mở Xcode và tạo một Playground mới. Chúng ta không cần phải tạo một project mới, chỉ cần một Playground là đủ rồi.

Enumerations

Nếu như bạn chưa biết, thì enumerations, hay enums, là một kiểu giá trị đặc biệt trong Swift cho phép bạn thể hiện nhiều trường hợp, hoặc khả năng. Enum tương đương với Boolean ở điểm giá trị enum có thể là nhiều trường hợp. Bool thì chỉ có thể là đúng hoặc sai, nhưng enum thì lại bất kỳ trường hợp nào mà bạn muốn đặt ra.

Giả sử file Playground của bạn đã sẵn sàng, chúng ta khai báo một enum như sau:

enum DownloadStatus {
    case downloading
    case finished
    case failed
    case cancelled
}

Như bạn đã thấy thì, khai báo một enum rất dễ dàng. Ở ví dụ trên, chúng ta đã khai báo một enum có tên là DownloadStatus với 4 case, downloadingfinishedfailed, và cancelled

var currentStatus = DownloadStatus.downloading

Khi khai báo một enum, tên thực sự của enum đó nên được bắt đầu bằng chữ viết hoa và ở dạng số ít. Việc tuân thủ theo những quy định ngữ pháp và code convention là rất quan trọng.Thêm vào đó, các enum case thường bắt đầu bằng chữ cái thường

Bây giờ thì bạn đã biết enums là gì rồi, hãy tìm hiểu cách sử dụng chúng. Swift cho phép chúng ta switch giữa các enum như sau:

let currentStatus = DownloadStatus.downloading
 
switch currentStatus {
case .downloading:
    print("Downloading...")
    
case .finished:
    print("Just finished the download...")
    
case .failed:
    print("Failed to download the file...")
    
case .cancelled:
    print("The download is cancelled...")
}

Đoạn code trên cho phép chúng ta viết những câu lệnh điều kiện mạnh mẽ hơn những dòng if đơn thuần. Trình biên dịch sẽ bắt chúng ta xử lý từng trường hợp trong enum tại khối lệnh switch, đảm bảo ko bỏ sót trường hợp nào. Từ đó tăng tính an toàn cho code.

Cho đến thời điểm này, bạn có thể nghĩ rằng enum không thực sự thêm điều gì mới mẻ cho Swift.Đúng là nó có thể khiến code của chúng ta an toàn hơn, nhưng bạn cũng có thể sử dụng một chuỗi String hoặc vài biến Bools cho dữ liệu được lưu trữ bởi enum. Bây giờ, hãy cùng nhìn vào một trong những tính năng mạnh mẽ nhất của enum: associated values. Associated value cho phép chúng ta lưu trữ thêm dữ liệu ở bên trong enum. Hãy khai báo một enum mới có tên là WeatherCondition, bao gồm các tình trạng thời tiết và một vài thông tin bổ sung:

enum Cloud {
    case cirrus
    case cumulus
    case altocumulus
    case stratus
    case cumulonimbus
}
 
enum WeatherCondition {
    case sunny(temperature: Float)
    case rainy(inchesPerHour: Float)
    case cloudy(cloudType: Cloud, windSpeed: Float)
}

Ở ví dụ này, chúng ta thực chất đã khai báo 2 enums: Cloud và WeatherCondtion. Đừng quá chú ý vào enum Cloud, thay vào đó, tai enum WeatherCondition, chúng ta khai báo 3 case, và mỗi case lưu trữ một vài dàng thông tin bên ngoài enum đó. Ở case sunny, chúng ta lưu một biến Int là temperature. Ở case rainy, chúng ta lưu một biến Float là inchesPerHour..vv

Và theo bạn thấy thì, giá trị associated value cho phép chúng ta lưu thêm thông tin tại enum một cách dễ dàng:

let currentWeather = WeatherCondition.cloudy(cloudType: .cirrus, windSpeed: 4.2)

Chúng ta có thể switch  tại associated value enum cases, như những case bình thường.

switch currentWeather {
case .sunny(let temperature):
    print("It is sunny and the temperature is \(temperature).")
    
case .rainy(let inchesPerHour):
    print("It is raining at a rate of \(inchesPerHour) inches per hour.")
    
case .cloudy(let cloudType, let windSpeed):
    print("It is cloudy; there are \(cloudType) clouds in the sky, and the wind speed is \(windSpeed).")
}

Đến đây thì các bạn đã nhìn được giá trị thật sự mà enums mang cho chúng ta. Nó có thể khiến code của chúng ta an toàn hơn, rõ ràng hơn và súc tích hơn. Có thể bạn đã biết về enums, nhưng chưa để ý đến associated value và những lợi ích nó mang lại, hay làm cách nào để switch giữa chúng. Đừng lo, hãy cứ kếp hợp chúng lại với nhau và bạn sẽ thấy sự tiện ích đến không ngờ mà chúng mang lại.

Phần tiếp theo, chúng ta sẽ cùng nhau tìm hiểu một đặc điểm nổi bật nữa của Swift, đó là Closure và High Order Function.

Hết phần 1.

Xem khóa đào tạo nhân sự theo danh mục!

Xem các khóa đào tạo nhân sự