Swift - Các phép liệt kê

Liệt kê là một kiểu dữ liệu do người dùng xác định bao gồm tập hợp các giá trị liên quan. Từ khóaenum được sử dụng để xác định kiểu dữ liệu liệt kê.

Chức năng liệt kê

Cách liệt kê trong Swift 4 cũng giống với cấu trúc của C và Objective C.

  • Nó được khai báo trong một lớp và các giá trị của nó được truy cập thông qua thể hiện của lớp đó.

  • Giá trị thành viên ban đầu được xác định bằng cách sử dụng enum intializers.

  • Chức năng của nó cũng được mở rộng bằng cách đảm bảo chức năng giao thức tiêu chuẩn.

Cú pháp

Các phép liệt kê được giới thiệu với từ khóa enum và đặt toàn bộ định nghĩa của chúng trong một cặp dấu ngoặc nhọn -

enum enumname {
   // enumeration values are described here
}

Ví dụ, bạn có thể xác định một bảng liệt kê cho các ngày trong tuần như sau:

enum DaysofaWeek {
   case Sunday
   case Monday
   ---
   case Saturday
}

Thí dụ

enum names {
   case Swift
   case Closures
}

var lang = names.Closures
lang = .Closures

switch lang {
   case .Swift:
      print("Welcome to Swift")
   case .Closures:
      print("Welcome to Closures")
   default:
      print("Introduction")
}

Khi chúng tôi chạy chương trình trên bằng sân chơi, chúng tôi nhận được kết quả sau:

Welcome to Closures

Kiểu liệt kê Swift 4 không gán giá trị mặc định cho các thành viên của nó như C và Objective C. Thay vào đó, các thành viên được xác định rõ ràng bằng tên kiểu liệt kê của chúng. Tên bảng kê phải bắt đầu bằng chữ in hoa (Ví dụ: enum DaysofaWeek).

var weekDay = DaysofaWeek.Sunday

Ở đây, tên Enumeration 'DaysofaWeek' được gán cho một ngày trong tuần có thể thay đổi. Nó thông báo cho trình biên dịch rằng kiểu dữ liệu thuộc về Sunday sẽ được gán cho các thành viên enum tiếp theo của lớp cụ thể đó. Khi kiểu dữ liệu thành viên enum được xác định, các thành viên có thể được truy cập bằng cách chuyển các giá trị và tính toán thêm.

Liệt kê với Tuyên bố Chuyển đổi

Câu lệnh 'Switch' của Swift 4 cũng tuân theo lựa chọn đa chiều. Chỉ một biến được truy cập tại một thời điểm cụ thể dựa trên điều kiện đã chỉ định. Trường hợp mặc định trong câu lệnh switch được sử dụng để bẫy các trường hợp không xác định.

enum Climate {
   case India
   case America
   case Africa
   case Australia
}

var season = Climate.America
season = .America
switch season {
   case .India:
      print("Climate is Hot")
   case .America:
      print("Climate is Cold")
   case .Africa:
      print("Climate is Moderate")
   case .Australia:
      print("Climate is Rainy")
   
}

Khi chúng tôi chạy chương trình trên bằng sân chơi, chúng tôi nhận được kết quả sau:

Climate is Cold

Đầu tiên, chương trình định nghĩa Khí hậu là tên kiểu liệt kê. Sau đó, các thành viên của nó như 'Ấn Độ', 'Châu Mỹ', 'Châu Phi' và 'Úc' được tuyên bố là thuộc lớp 'Khí hậu'. Giờ đây, thành viên America được chỉ định vào một Season Variable. Hơn nữa, trường hợp Switch sẽ thấy các giá trị tương ứng với .America và nó sẽ phân nhánh cho câu lệnh cụ thể đó. Đầu ra sẽ được hiển thị là "Khí hậu lạnh". Tương tự như vậy, tất cả các thành viên có thể được truy cập thông qua các câu lệnh chuyển đổi. Khi điều kiện không được thỏa mãn, nó sẽ in theo mặc định 'Không thể đoán trước được khí hậu'.

Việc liệt kê có thể được phân loại thêm thành các giá trị liên quan và giá trị thô.

Sự khác biệt giữa Giá trị liên kết và Giá trị thô

Giá trị liên kết Giá trị thô
Các kiểu dữ liệu khác nhau Cùng kiểu dữ liệu
Ví dụ: enum {10,0.8, "Xin chào"} Ví dụ: enum {10,35,50}
Giá trị được tạo dựa trên hằng số hoặc biến Giá trị phổ biến trước
Thay đổi khi khai báo mỗi lần Giá trị cho thành viên là như nhau

Enum với các giá trị được liên kết

enum Student {
   case Name(String)
   case Mark(Int,Int,Int)
}

var studDetails = Student.Name("Swift 4")
var studMarks = Student.Mark(98,97,95)

switch studMarks {
   case .Name(let studName):
      print("Student name is: \(studName).")
   case .Mark(let Mark1, let Mark2, let Mark3):
      print("Student Marks are: \(Mark1),\(Mark2),\(Mark3).")
}

Khi chúng tôi chạy chương trình trên bằng sân chơi, chúng tôi nhận được kết quả sau:

Student Marks are: 98,97,95.

Hãy xem xét ví dụ để truy cập vào tên sinh viên và các điểm được bảo mật trong ba môn học, tên liệt kê được khai báo là sinh viên và các thành viên có mặt trong lớp enum là tên thuộc kiểu dữ liệu chuỗi, các dấu được biểu diễn dưới dạng mark1, mark2 và mark3 của kiểu dữ liệu Integer. Để truy cập tên học sinh hoặc điểm họ đã ghi

var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)

Bây giờ, trường hợp chuyển đổi sẽ in tên học sinh nếu khối trường hợp đó được thực thi nếu không, nó sẽ in các dấu được bảo mật bởi học sinh. Nếu cả hai điều kiện không thành công, khối mặc định sẽ được thực thi.

Enum với giá trị thô

Giá trị thô có thể là chuỗi, ký tự hoặc bất kỳ kiểu số nguyên hoặc dấu phẩy động nào. Mỗi giá trị thô phải là duy nhất trong khai báo liệt kê của nó. Khi số nguyên được sử dụng cho các giá trị thô, chúng sẽ tự động tăng lên nếu không có giá trị nào được chỉ định cho một số thành viên liệt kê.

enum Month: Int {
   case January = 1, February, March, April, May, June, July, August,
      September, October, November, December
}

let yearMonth = Month.May.rawValue
print("Value of the Month is: \(yearMonth).")

Khi chúng tôi chạy chương trình trên bằng sân chơi, chúng tôi nhận được kết quả sau:

Value of the Month is: 5.