Tải bản đầy đủ
bài 1. SƠ LƯỢC VỀ NGÔN NGỮ LẬP TRÌNH SWIFT

bài 1. SƠ LƯỢC VỀ NGÔN NGỮ LẬP TRÌNH SWIFT

Tải bản đầy đủ

Hãy để ý rằng Swift sẽ không yêu cầu bạn phải khai báo các kiểu giá trị khi dịch chương trình.
Điều này cũng đồng nghĩa với việc các kiểu giá trị đều sẽ được xác định ở running time. Như
vậy nhiều khả năng Swift sẽ chạy không nhanh bằng Objective C vì Objective C đã xác định
kiểu giá trị lúc biên dịch chương trình.
Bạn cũng có thể chỉ định kiểu giá trị khi khai báo biến hay hằng như sau:

1 let explicitDouble: Double = 70
Để thêm value vào string, bạn có thể sử dụng cách sau:

1
2
3
4
5

let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit
print(fruitSummary)

3. Mảng và từ điển
Bạn có thể tạo ra mảng và từ điển bằng cách dùng ký tự [] như sau:

1
2
3
4
5
6
7

var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1] = "bottle of water"
var occupations = [
"Malcolm": "Captain",
"Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations

Hãy chú ý Objective C dùng ký hiệu {} để tạo ra Dictionary. Với cả hai ngôn ngữ này thì
chúng ta sử dụng chỉ số để truy cập thành phần mảng, dùng key để truy cập vào giá trị của
dictionary.
Để tạo ra được mảng rỗng hay dictionary rỗng, bạn có thể sử dụng ký tự dưới đây:

2

1 let emptyArray = [String]()
2 let emptyDictionary = [String: Float]()

Hay đơn giản hơn:

1 shoppingList = []
2 occupations = [:]
4. Điều khiển trong Swift.
Giống như những ngôn ngữ khác, Swift cũng có những điều khiển If, switch và những điều
khiển lặp như là while, do-while, và for. Điều đặc biệt hơn đó là các dấu ngoặc tròn hoàn toàn
có thể bỏ qua, tuy nhiên những dấu ngoặc nhọn là bắt buộc:

1
2
3
4
5
6
7
8
9
10

let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
if score > 50 {
teamScore += 3
} else {
teamScore += 1
}
}
print(teamScore)

Với vòng lặp for thì bạn có thể chỉ định dải giá trị lặp như dưới đây:

1 var firstForLoop = 0
2 for i in 0..<4 {
3
firstForLoop += i
4 }
5 println(firstForLoop)

3

Câu lệnh phía trên sẽ in ra giá trị 6 bởi vòng lặp chỉ chạy tới 3. Để cho vòng lặp chạy tới giá trị
cận trên của range, bạn có thể dùng ký hiệu (…) thay vì ..< Điều này có thể là sự mở rộng của
Python bởi Python không cho phép bạn bao gồm cận trên trong vòng lặp for.
Vòng lặp do-while và while trong Swift cũng gần giống như trong những ngôn ngữ lập trình
khác. Sau đây là ví dụ:

1
2
3
4
5
6
7
8
9

var n = 2
while n < 100 {
n=n*2
}
var m = 2
do {
m=m*2
} while m < 100

Để ý rằng ta không cần dùng dấu ngoặc tròn () bên trong biểu thức điều kiện của những vòng
lặp này.
Một khái niệm rất mới mẻ trong Swift đó là Optional. Optional có thể mang những giá trị thực
sự hay bằng nil. Để khai báo 1 biến là optional chúng ta cần thêm dấu hỏi chấm:

1 var optionalString: String? = "Hello"
2 optionalString == nil
Với mỗi giá trị Optional, ta hoàn toàn có thể hạn chế lỗi crash khi lập trình ứng dụng. Xem
đoạn code dưới đây:

1
2
3
4
5

var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
//-your code goes here
}

Ở đoạn code trên, nếu hằng “name” có giá trị là nil thì đoạn code trong dấu ngoặc nhọn sẽ
không thể được thực hiện. Như vậy nếu như bên trong bạn có một tham chiếu đến “name ” thì
ứng dụng sẽ không crash khi name=nil.

4

Switch trong Swift sẽ là một cải tiến khá lớn. Nó hỗ trợ rất nhiều kiểu dữ liệu (không chỉ là
integer như nhiều ngôn ngữ khác) và còn nhiều phép toán so sánh:

1 let vegetable = "red pepper"
2 switch vegetable {
3
case "celery":
4
let vegetableComment = "Add some raisins and make ants on a log."
5
case "cucumber", "watercress":
6
let vegetableComment = "That would make a good tea sandwich."
7
case let x where x.hasSuffix("pepper"):
8
let vegetableComment = "Is it a spicy \(x)?"
9
default:
10
let vegetableComment = "Everything tastes good in soup."
11 }

Để ý rằng ở đây ta không cần sử dụng lệnh break vì chương trình sẽ nhảy ra khỏi lệnh switch
khi nó thực hiện xong một case. Điều này trái ngược với các ngôn ngữ lập trình khác.
Trên đây là một số quy tắc cơ bản đối với Swift, một ngôn ngữ lập trình mới mẻ được phát
triển bởi Apple mà theo ý kiến chủ quan của mình làm ngôn ngữ lai giữa hai loại “Dynamic
Typing” (Python, PHP, etc.) và “Static Typing” (C/C++/Java, etc.) Chúng ta sẽ cùng tìm hiểu
tiếp về sức mạnh của Swift trong các phần tiếp theo.

5

BÀI 2. CƠ BẢN VỀ NGÔN NGỮ SWIFT (P2)
Ở bài trước chúng ta tìm hiểu khái niệm cơ bản của lập trình swift. Và hôm nay mình sẽ tìm
hiểu 1 số cái mới như hàm (function), closure và lớp (class). Kết thúc bài học hôm nay bạn sẽ
nắm được những điều căn bản của lập trình swift. Bước đầu cảm nhận được sức mạnh và tính
linh hoạt của ngôn ngữ lập trình này.
1. Hàm trong Swift
Hàm trong Swift đã có sự cải tiện cực lớn ,nếu bạn đã ngạc nhiên về cách khai báo hàm khi học
Objective-C thì bạn sẽ càng bất ngờ hơn khi học Swift. Để khai báo hàm bạn cần dùng từ khóa
“func” tương tự như từ khóa “def” trong Python. Và dùng dấu “->” để chỉ ra kiểu giá trị trả về:

1 func greet(name: String, day: String) -> String {
2 return "Hello \(name), today is \(day)."
3}
4 greet("Bob", "Tuesday")”

Còn một khái niệm mới trong Swift là “tuple”. Tuple chính là khái niệm trong lập trình để chỉ
cấu trúc dữ liệu bao gồm nhiều thành phần. Hàm trong Swift cho phép trả về 1 giá trị dưới
dạng Tuple. Và điều này cũng khá là linh hoạt nếu như bạn muốn 1 hàm trả về giá trị nhiều hơn
1:

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

func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
var min = scores[0]
var max = scores[0]
var sum = 0
for score in scores {
if score > max {
max = score
} else if score < min {
min = score
}
sum += score
}
return (min, max, sum)
}
let statistics = calculateStatistics([5, 3, 100, 3, 9])
statistics.sum statistics.2

Đặc biệt hơn, đối với tuple bạn hoàn toàn có thể truy cập những giá trị bằng 2 cách đó là sử
dụng chỉ số và sử dụng tên. Đây chính là 1 lợi thế lớn so với kiểu Array thông thường. Tương
tự với C++, Python và 1 số ngôn ngữ khác thì Swift cho phép hàm được khai báo với số lượng
tham số đầu vào có thể thay đổi được. Cụ thể như sau:

6

1
2
3
4
5
6
7
8
9

func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf()
sumOf(42, 597, 12)

Ở hàm trên, numbers được trình biên dịch ngầm hiểu là có kiểu array, do đó để tìm được giá trị
tổng thì chúng ta có thể lặp qua tất cả giá trị thành viên của array.
Bạn có thể khai báo hàm bên trong bằng 1 hàm khác, hàm trong sẽ có thể truy cập biến được
khai báo ở hàm ngoài. Việc dùng hàm bên trong hàm có ích lợi trong trường hợp hàm của bạn
dài quá hay quá phức tạp. Bạn có thể tổ chức thành những hàm nhỏ và dễ đọc hơn.

1 func returnFifteen() -> Int {
2 var y = 10
3 func add() {
4
y += 5
5 }
6 add()
7 return y
8}
9 returnFifteen()

Trong Swift thì hàm vừa có thể nhận được giá trị đầu vào là hàm khác lại vừa có thể trả về giá
trị là 1 hàm khá. Ví dụ:
Trả về giá trị là 1 hàm

1
2
3
4
5
6
7
8

func makeIncrementer() -> (Int -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)

Nhận giá trị tham số là 1 hàm khác:

7