Enum nâng cao trong Swift

Tram Ho

1. Properties

Trong enum không thể tạo các stored properties, nhưng có thể chứa các computed property.

Giờ tạo một enum tên là Device, nó chứa một computed property mang tên year, trả về năm ra đời của device đó.

2. Methods

Chúng ta cũng có thể định nghĩa các methods trong một enum.

Ví dụ dưới đây sử dụng Switch chính các case trong enum Device để in ra năm sản xuất của divce đó:

3. Nested Enums

Chúng ta có thể tạo một enum bên trong một enum, điều này cho phép code cấu trúc và clear hơn.

4. Containing Enums

Chúng ta có thể nhúng các enum vào trong struct hoặc class.

4.1 Tạo một struct chứa các enum

Ví dụ khi làm một trò chơi, ta cần tạo một nhân vật, có vũ khí và “class”:

4.2 Initialization

Để init một nhân vật mới, chúng ta phải chọn “class” và loại vũ khí:

5. Mutating Method

Tạo một mutating function mà có thể thay đổi case thành một case khác để sử dụng vào các trường hợp đặc biệt.
Ví dụ dưới đây định nghĩa một enum cho ba tốc độ của một cái quạt:

6. Static Method

Chúng ta cũng có thể tạo các static method trong enum. Ví dụ dưới đây tạo một enum tên là Device, chứa một static funtion trả về enum Device dựa trên tên thiết bị nhập vào từ tham số của static function:

7. Custom Init

Tạo một phương thức khởi tạo custom:

8. Protocol Oriented Enum

Ta cũng có thể conform một protocol với enum.

Để hiểu được cách conform protocol với enum. Ta sẽ tạo ra một trò chơi, trong đó, một player có thể có 2 trạng thái .dead hoặc .alive. Khi .alive, player có các chỉ số máu, và mạng. nếu các chỉ số này xuống đến 0, player sẽ chết (.dead):

8.1 Create Protocol

Let’s create a protocol called, LifeSpan. It contains one property, numberOfHearts and two mutating functions which will be used to increase/decrease a player’s heart.
Tạo một protocol gọi là LifeSpan, chứa 1 property – numberOfHearts và 2 mutating functions mà sẽ sử dụng để tăng hoặc giảm chỉ số máu của player:

8.2 Create Enum

Bây giờ, tạo một enum Player, conform protocol LifeSpan, có 2 case, .alive hoặc .dead, case .alive gán với chỉ số máu hiện tại – currentHeart. 1 computed property tính chỉ số máu của nhân vật – numberOfHearts, dựa vào trạng thái .dead hoặc .alive của player.

8.3 Play Game

Chơi game nào.

9. Extensions

Chúng ta cũng có thể tạo extension cho enum để bổ sung các property và method:

10. Generic Enums

Ta cũng có thể tạo các enum generic:

Init:

let info = Information.name("Bob") // Error

Trình biên dịch báo lỗi do ta mới cho biết T1 là kiểu String dựa vào chuỗi “Bob”. Tuy nhiên, kiểu dữ liệu của T2 chưa được định nghĩa. Do đó, ta phải định nghĩa cả 2 kiểu T1 và T2:

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo