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, downloading
, finished
, failed
, 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.
Bạn đang muốn tìm kiếm 1 công việc với mức thu nhập cao.
✅ Hoặc là bạn đang muốn chuyển đổi công việc mà chưa biết theo học ngành nghề gì cho tốt.
✅ Giới thiệu với bạn Chương trình đào tạo nhân sự dài hạn trong 12 tháng với những điều đặc biệt mà chỉ có tại IMIC và đây cũng chính là sự lựa chọn phù hợp nhất dành cho bạn:
👉 Thứ nhất: Học viên được đào tạo bài bản kỹ năng, kiến thức chuyên môn lý thuyết, thực hành, thực chiến nhiều dự án và chia sẻ những kinh nghiệm thực tế từ Chuyên gia có nhiều năm kinh nghiệm dự án cũng như tâm huyết truyền nghề.
👉 Thứ hai: Được ký hợp đồng cam kết chất lượng đào tạo cũng như mức lương sau tốt nghiệp và đi làm tại các đối tác tuyển dụng của IMIC. Trả lại học phí nếu không đúng những gì đã ký kết.
👉 Thứ ba: Cam kết hỗ trợ giới thiệu công việc sang đối tác tuyển dụng trong vòng 10 năm liên tục.
👉 Thứ tư: Được hỗ trợ tài chính với mức lãi suất 0 đồng qua ngân hàng VIB Bank.
👉 Có 4 Chương trình đào tạo nhân sự dài hạn dành cho bạn lựa chọn theo học. Gồm có:
1) Data Scientist full-stack
2) Embedded System & IoT development full-stack
3) Game development full-stack
4) Web development full-stack
✅ Cảm ơn bạn đã dành thời gian lắng nghe những chia sẻ của mình. Và tuyệt vời hơn nữa nếu IMIC được góp phần vào sự thành công của bạn.
✅ Hãy liên hệ ngay với Phòng tư vấn tuyển sinh để được hỗ trợ về thủ tục nhập học.
✅ Chúc bạn luôn có nhiều sức khỏe và thành công!