Tải bản đầy đủ
Bài 4. SỬ DỤNG KIỂU ENUM TRONG LẬP TRÌNH SWIFT

Bài 4. SỬ DỤNG KIỂU ENUM TRONG LẬP TRÌNH SWIFT

Tải bản đầy đủ

Sau đó do kiểu của onedirection đã biết, chúng ta có thể viết:

1 onedirection = .West
2. Sử dụng kiểu enum cùng với câu lệnh Swift
Tiếp tục ví dụ trên, khi biến onedirection đã được suy luận kiểu hoặc khi sử dụng trong câu
lệnh Switch, chúng ta hoàn toàn có thể lược bớt phần tên kiểu enum và chỉ giữ lại tên của thành
viên (member) của kiểu enum đó:

1
2
3
4
5
6
7
8
9
10

switch onedirection {
case .East:
println(“The East”)
case .West:
println(“The West”)
case .South:
println(“The South”)
case .North:
println(“The North”)
}

Trong câu lệnh Switch thì mọi trường hợp đều phải được xem xét. Do vậy nếu như thiếu bạn
không liệt kê đầy đủ mọi trường hợp, cần phải thêm “default”:

1
2
3
4
5
6

switch onedirection {
case .West:
println(“This is the West”)
default:
println(“Other cases”)
}

3. Giá trị liên hợp trong kiểu enum
Như ở phần 3 chúng ta đã đề cập thì trong kiểu enum ta có thể khai báo 1 loại cú pháp giống
như Macro trong C++. Đây cũng chính là kiểu giá trị liên hợp (associated value) sử dụng trong
enum Swift. Mục đích của nó chính là khai báo mỗi thành viên như là một tập các giá trị có
mối quan hệ với nhau. Cùng theo dõi ví dụ sau:

17

1
2
3
4

enum BarCode {
case UPCA(Int, Int, Int, Int)
case QRCode(String)
}

Kiểu enum phía trên khai báo 2 thành viên tương ứng với bar code 1D và QR code (2D).
Thành viên thứ nhất chính là giá trị liên hợp bao gồm 4 số nguyên, trong khi đó thành viên thứ
2 cũng chính là giá trị liên hợp tuy nhiên lại chỉ bao gồm duy nhất 1 chuỗi ký tự.
Để có thể tạo ra một bar code mới, chúng ta sử dụng cú pháp sau:

1 var barcode = BarCode.UPCA(1, 59000, 10000, 8)
sau đó có thể gán:

1 barcode = BarCode.QRCode(“This is a URL”)
Khi sử dụng trong câu lệnh Switch, để dùng những giá trị liên hợp thì ta cần phải khai báo
hằng hay biến tương ứng:

1
2
3
4
5
6

switch barcode {
case BarCode.UPCA(let systemNum, let manufacturerNum, let productNum, let checkNum):
println(“Manufacture number is \(manufacturerNum)”)
case BarCode.QRCode(let codedStr):
println(codedStr)
}

Nếu như khai báo mọi giá trị liên hợp cùng là hằng hay biến, chúng ta có thể xài cú pháp rút
gọn như sau:

18

1
2
3
4
5
6

switch barcode {
case let BarCode.UPCA(systemNum, manufacturerNum, productNum, checkNum):
println(“Manufacture number is \(manufacturerNum)”)
case var BarCode.QRCode(codedStr):
println(codedStr)
}

4. Giá trị đơn trong kiểu enum
Khi khai báo theo kiểu enum có thể chỉ định giá trị default cho mọi thành viên (member) của
nó. Giá trị này được chỉ định cho member là những giá trị đơn (raw values). Giá trị đơn cũng
có thể là String, Int, Float, Character… Chẳng hạn:

1
2
3
4
5

enum ASCIIControlCharacter: Character {
case Tab = “\t”
case LineFeed = “\n”
case CarriageReturn = “\r”
}

Nếu như kiểu enum gồm những thành viên có kiểu Int thì những thành viên cách nhau một đơn
vị (hoàn toàn giống với kiểu enum truyền thống):

1 enum Planet: Int {
2 case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
3}

Với khai báo trên, Planet.Venus sẽ có giá trị là 2.
Để truy cập giá trị đơn, chúng ta sẽ sử dụng cú pháp sau:

1 let earthsOrder = Planet.Earth.rawValue
Để khởi tạo 1 biến hay hằng enum mới, chúng ta dùng hàm tạo mặc định với giá trị đơn:

19

1 let possiblePlanet = Planet(rawValue: 7)
Tuy nhiên chúng ta cũng cần lưu ý rằng kiểu trả về của hàm tạo này là optional vì dải giá trị
của kiểu enum không nhất thiết chứa tham số đầu vào của hàm này, do vậy cần lưu ý khi sử
dụng để tránh crash chương trình.
5. Khai báo hàm trong kiểu enum
Ở đây mình chỉ nhắc lại về việc khai báo hàm trong kiểu enum. Trong enum, chúng ta có thể
khai báo hàm, và hàm này cũng có thể được gọi từ những member của kiểu enum đó. Chẳng
hạn:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

enum Suit {
case Spades, Hearts, Diamonds, Clubs
func simpleDescription() -> String {
switch self {
case .Spades:
return “spades”
case .Hearts:
return “hearts”
case .Diamonds:
return “diamonds”
case .Clubs:
return “clubs”
}
}
}
let hearts = Suit.Hearts
let heartsDescription = hearts.simpleDescription()

6. Tổng kết.
Qua bài viết ngày hôm nay, chúng ta đã học được cách khai báo và sử dụng kiểu enum trong
lập trình Swift. So với kiểu các enum truyền thống thì enum trong Swift đã tiến hoá hơn và trở
nên mềm dẻo, hữu dụng và mạnh mẽ hơn. Đáng chú ý nhất chính là việc nó hỗ trợ kiểu giá trị
liên hợp và khai báo hàm. Trong những bài sau, các tính năng của Swift sẽ lần lượt được thảo
luận chi tiết.

20

Bài 5. [HÀM ĐIỀU KHIỂN] – CẤU TRÚC LẶP TRONG LẬP TRÌNH SWIFT
Chào các bạn, hôm nay chúng ta sẽ tìm hiểu về cấu trúc lặp trong lập trình Swift, cách hoạt
động và cách dùng của những hàm điều khiển căn bản trong Swift.
Vòng lặp là 1 mã lệnh mà trong đó chương trình sẽ được thực hiện lặp đi lặp lại nhiều lần cho
đến khi nó thỏa mãn 1 điều kiện nào đó.
1. Vòng lặp for
Cú pháp:

1 for ;; {
2



3}



: khai báo và gán thêm giá trị cho biến đếm



: điều kiện để có thể dừng vòng lặp



: thay đổi giá trị biến đếm

Ví dụ:

1 for var i = 0; i < 5; ++i { //khai báo biến đếm i có giá trị 0; điều kiện để vòng lặp thực hiện là biến i bé hơn 5; sau mỗi lần thực hiện, biến
2

println("i = \(i)") //in giá trị i ra màn hình sau mỗi lần vòng lặp thực hiện

3 }

2. Vòng lặp for-in
Vòng lặp for-in thường được dùng khi biết trước về số lần lặp. Vòng lặp for-in sẽ sử dụng một
biến đại diện cho từng vị trí tương ứng tại thời điểm lặp để có thể lấy ra giá trị bên trong của
đối tượng (mảng, từ điển…).

21

Cú pháp

1 for in <đối tượng> {
2



3}

1
2



: sẽ đại diện cho phần tử có những vị trí tương ứng tại một thời điểm lặp



<đối tượng>: nó có thể là một mảng, một từ điển hay một dãy số cho trước. Giả dụ:

//In các số lần lượt từ 1 đến 9 ra màn hình
for i in 1...9 {
println("Số i = \(i)")

3
4

}

5
6 //In các giá trị trong mảng ra màn hình
7 var mang = [10,11,12,13,14,15]
8 for i in mang {
9

println(i)

10 }
11
12
13
14

//In giá trị các key trong từ điển
var tudien = ["Tháng 1": 3500, "Tháng 2": 3150, "Tháng 3": 3220, "Tháng 4": 4000]
for (x,y) in tudien {

15

println("Thu nhập trong \(x) là \(y)")



Tuỳ từng trường hợp mà chúng ta có thể dùng for hay for-in, tuy nhiên hầu hết khi
chúng ta làm việc với Array/Dictionary thì đều sử dụng for-in.

22