Vẫn có đầy đủ các kiểu dữ liệu như Objective-C nhưng được bổ sung thêm.
Bảng 2.1 Các kiểu dữ liệu trong Swift
Kiểu dữ liệu Độ rộng Phạm vi giá trị
Int8 1byte -127 tới 127
UInt8 1byte 0 tới 255
Int32 4bytes -2147483648 tới 2147483647
UInt32 4bytes 0 tới 4294967295
Int64 8bytes -9223372036854775808 tới 9223372036854775807
UInt64 8bytes 0 tới 18446744073709551615
Float 4bytes 1.2E-38 tới 3.4E+38 (~6 digits) Double 8bytes 2.3E-308 tới 1.7E+308 (~15 digits)
2.2.4 Các phép toán
Bảng 2.2 Các phép toán trong Swift
Phép toán Ký hiệu Ví dụ Cộng + A + B Trừ - A – B Nhân * A * B Chia / A / B Lấy phần dư % M % N
Lưu ý: Phép lấy phần dư chỉ được dùng trên 2 toán hạng kiểu số nguyên (nếu không sẽ sinh lỗi cú pháp)
Ví dụ: 9 % 5 = 4
2.2.5 Hàm (Function)
Hàm trong lập trình Swift được viết bởi khối lệnh khép kín và được sử dụng cho một chức năng nào đó.Bạn cần đặt tên hàm sao cho tên hàm dễ nhớ và có liên quan tới chức năng mà nó sử dụng.Cũng như các ngôn ngữ lập trình khác hàm trong
println("Xin chào \(name) đã đến với VietHanIT") }
//gọi hàm
var name = "SinhVien" hello(name)
//kết quả: Xin chào SinhVien đã đến với VietHanIT
Hàm hello với mục địch chỉ để thực hiện 1 lệnh nào đó bên trong,hàm này truyền vào tham số là 1 biến dạng String và không trả về giá trị nào cả.
Hàm truyền vào nhiều tham số
//khai báo hàm
func phepNhan(a: Int,b: Int) -> Int{ var c = a*b
return c }
//gọi hàm
var a = 2 //khai bao bien a var b = 5 //khai bao bien b
var c = phepNhan(a, b) // goi ham tin phep nhan println("Phép nhân: \(a) nhân \(b) bằng \(c)") //kết quả: Phép nhân: 2 nhân 5 bằng 10
Ví dụ trên khai báo hàm phepNhan với 2 tham số truyền vào là 2 kiểu số nguyên và kết quả trả về từ hàm này 1 số nguyên,trong hàm này mình sử dụng lệnh
2.2.6 Cấu trúc điều kiện Các toán tử so sánh thông dụng: Bảng 2.3 Các toán tử so sánh thông dụng Toán tử Ý nghĩa Ví dụ > Lớn hơn 5 > 4 là đúng (true) < Nhỏ hơn 4 < 5 là đúng (true)
>= Lớn hơn hoặc bằng 4 >= 4 là đúng (true) <= Nhỏ hơn hoặc bằng 3 <= 4 là đúng (true)
== Bằng nhau 1 == 1 là đúng (true)
!= Không bằng nhau 1 != 2 là đúng (true)
&& Và a > 4 && a < 10
|| Hoặc a == 1 || a == 4
Hàm If
o Cú pháp: if <điều kiện> { <câu lệnh> }
o Khi <điều kiện> đúng thì <câu lệnh sẽ được thực hiện>, khi điều kiện sai thì hàm if sẽ không làm gì cả.
Hàm If-Else
o Cú pháp: if <điều kiện> { <câu lệnh 1> } else { <câu lệnh 2> }
o Khi <điều kiện> đúng thì <câu lệnh 1> sẽ được thực hiện. Ngược lại, khi <điều kiện> sai thì <câu lệnh 2> sẽ được thực hiện.
Câu lệnh Switch-Case
Hàm Switch-Case là một dạng mở rộng của hàm If và If-Else, được dùng để thay thế If và If-Else trong trường hợp có một điều kiện nhưng nhiều trường hợp xảy ra.
Cú pháp:
- Hàm Switch sẽ tính biểu thức và kiểm tra xem nó có bằng <giá trị 1> hay không, nếu đúng thì nó thực hiện <câu lệnh 1>.
- Còn nếu không, switch sẽ kiểm tra xem biểu thức có bằng <giá trị 2> hay không, nếu đúng nó sẽ thực hiện <câu lệnh 2>…
- Cuối cùng, nếu giá trị <biểu thức> không bằng bất kỳ <giá trị> nào được chỉ định ở trên, chương trình sẽ thực hiện các <câu lệnh> trong phần default: nếu nó tồn tại (vì phần này không bắt buộc phải có).
Ví dụ:
2.2.7 Cấu trúc lặp
Vòng lặp for Cú pháp:
Trong đó:
- <khai báo>: khai báo và gán giá trị cho biến đếm - <biểu thức 1>: điều kiện để dừng vòng lặp
- <biểu thức 2>: thay đổi giá trị cho biến đếm Ví dụ:
Vòng lặp for-in
Vòng lặp for-in thường được sử dụng khi biết trước số lần lặp. Vòng lặp for-in sẽ dùng một biến đại diện cho vị trí tương ứng tại thời điểm lặp để lấy ra giá trị bên trong đối tượng (mảng, từ điển…).
Cú pháp:
Vòng lặp While
Khi thoả mãng điều kiện thì cậu lệnh bên trong vòng lặp while sẽ được thực hiện. Vòng lặp while luôn kiểm tra điều kiện ngay từ đầu, nếu điều kiện sai thì câu lệnh bên trong vòng lặp while sẽ không được thực hiện.
Cú pháp:
Trong đó:
- <điều kiện>: biểu thức điều kiện để câu lệnh thực hiện - <câu lệnh 1>: nhóm câu lệnh cần thực hiện
- <câu lệnh 2>: câu lệnh để thay đổi giá trị so sánh của biểu thức điều kiện. Sau mỗi lần lặp giá trị phải tiến gần đến điều kiện để dừng vòng lặp, nếu không vòng lặp sẽ lặp vô tận.
Ví dụ:
Vòng lặp Do-While
Vòng lặp Do-While cũng giống như vòng lặp While nhưng các câu lệnh sẽ được thực hiện trước khi kiểm tra đến điều kiện. Nghĩa là các câu lệnh sẽ được thực hiện ít nhất 1 lần.
Cú pháp:
Trong đó:
- <câu lệnh 1>: là nhóm câu lệnh cần thực hiện
- <câu lệnh 2>: dùng để thay đổi giá trị so sánh của biểu thức điều kiện. Nếu giá trị so sánh của biểu thức điều kiện không tiến gần đến điều kiện dừng thì vòng lặp sẽ lặp vô tận.
- <điều kiện>: biểu thức điều kiện để câu lệnh thực hiện.
- Vòng lặp Do-While được sử dụng khi chưa biết trước số lần lặp Ví dụ:
2.2.8 Mảng (Array), Từ điển (Dictionary) và Tuples
Mảng (Array): là tập hợp các phần tử có cùng kiểu dữ liệu.
Từ điển (Dictionary): là kiểu tập hợp trong đó có hai thành phần chính liên hệ với nhau là khóa (key) và giá trị (value).
Tuples: là tập hợp các phần tử không cùng kiểu dữ liệu. Sau khi khai báo sẽ không thể thêm hoặc xoá phần tử mà chỉ có thể thay đổi giá trị phần tử.
Mảng (Array)
Phần tử đầu tiên trong mảng có số thứ tự bắt đầu là 0. Bạn có thể gán kiểu dữ liệu cho mảng khi khai báo nếu biết chính xác kiểu dữ liệu mà mảng sẽ chứa.
Từ điển (Dictionary)
Bạn có thể gán kiểu dữ liệu cho mảng khi khai báo nếu biết chính xác kiểu dữ liệu mà mảng sẽ chứa.
Từ điển 2 chiều
2.2.9 Chuỗi
Một chuỗi là một tập hợp có sắp xếp của những kí tự, như là “hello world” hay “albatross”.Chuỗi trong Swift biểu diễn bằng kiểu String, chúng lần lượt biểu diễn một tập hợp các giá trị của kiểu ký tự (Character).
Với cú pháp đơn giản, kiểu String của Swift rất nhanh trong việc thực hiện cách chuỗi. Mỗi chuỗi bao gồm các ký tự Unicode mã hóa độc lập, và cung cấp hỗ trợ cho việc truy cập các ký tự đại diện trong mã Unicode khác nhau.
Bạn có thể bao gồm các giá trị chuỗi được định nghĩa trước trong mã của bạn như các chuỗi. Một chuỗi chữ là một chuỗi ký tự cố định của văn bản bao quanh bởi một cặp dấu ngoặc kép (“”).
Để tạo một giá trị String rỗng như là điểm khởi đầu cho việ xây dựng một chuỗi dài hơn, hoặc gán một chuỗi rỗng cho một biến, hoặc khởi tạo một thể hiện String mới với cú pháp khởi tạo:
Xem giá trị một String là rỗng bằng cách kiểm tra thuộc tính isEmpty của nó:
2.3 Một số thao tác cơ bản trong lập trình iOS
Trước khi bắt đầu lập trình ứng dụng trên iPhone, ngoài việc bạn tìm hiểu về Xcode và iOS Simulator, bạn còn phải tìm hiểu thêm một số thao tác cơ bản trong lập trình iOS. Hiểu biết về các thao tác cơ bản này sẽ bổ trợ cho bạn trong quá trình tìm hiểu, cũng như là bài học vỡ lòng trước khi đi sâu vào tìm hiểu các đối tượng cơ bản trong Xcode ở chương sau. Nội dung chương này gồm một số thao tác cơ bản như:
Thay đổi icon của ứng dụng
Thay đổi màn hình khi ứng dụng vừa được mở lên
Hình 2.36 Icon
Sau khi chuẩn bị được hình ảnh với kích thước phù hợp, trong phần thông tin của Project, bạn kéo xuống phần App icon và kéo các icon chuẩn bị sẵn vào đúng vị trí của icon.
Hình 2.37 Kéo thả icon vào vị trí
Hình 2.38 Icon trên iOS simulator
2.3.2 Loading Screen
Loading Screen là hình ảnh mà khi chạy ứng dụng lên bạn sẽ thấy nó, tùy theo tốc độ của ứng dụng mà thời gian hiển thị Loading Screen nhanh hoặc chậm khác nhau. Để chuẩn bị cho Loading Screen bạn cần chuẩn bị trước hình ảnh dạng PNG, kích thước 640x1136 (iPhone 5 trở lên), 640x960 (iPhone 4).
Hình 2.39 Chuẩn bị Background
Hình 2.40 Kéo thả background image vào Lauch Image
2.3.3 Thay đổi App Name
App Name là tên của ứng dụng hiển thị bên dưới App icon trên màn hình iPhone. Nhiều trường hợp vì tên ứng dụng quá dài nên không thể hiển thị hết trên màn hình iPhone, do đó bạn cần phải đổi tên ứng dụng lại cho phù hợp, ngắn gọn để có thể hiện được tên ứng dụng bên dưới icon, như vậy ứng dụng sẽ có tính thẩm mỹ hơn. Để khắc phục trường hợp này, bạn cần phải thay đổi lại App Name. Bạn truy cập tập tin .plist và sửa đổi Bundle Display Name thành tên mới của ứng dụng.
Hình 2.42 Sửa đổi Bundle display name
Sau khi hoàn tất, bạn chạy ứng dụng trên iOS Simulator để xem kết quả.
Hình 2.43 Thay đổi tên trên iOS Simulator
2.3.4 Ẩn status bar
Việc ẩn status bar cho phép bạn chạy ứng dụng của mình toàn màn hình mà không phải thu nhỏ một phần giao diện dành chỗ cho status bar. Trước tiên bạn chọn tập tin .plist trong project, sau đó bạn thêm một dòng mới.
Hình 2.45 Chọn giá trị Yes
Chạy ứng dụng trên iOS Simulator để xem kết quả.
Hình 2.46 Thanh trạng thái Status bar đã mất
2.3.5 Background
Background Image
Hướng dẫn này sẽ hướng dẫn bạn tạo và sử dụng một hình ảnh làm hình nền cho ứng dụng của bạn. Trước tiên bạn cần phải chuẩn bị một tấm ảnh để làm hình nền. Kích thước của tấm ảnh này giống như hình ảnh trong Loading Screen: định dạng PNG, kích thước 640x1136 (iPhone 5 trở lên), 640x960 (iPhone 4).
Hình 2.47 Background Image
Sau khi chuẩn bị xong hình ảnh để làm background cho ứng dụng, bạn chép hình ảnh vào trong project.
Hình 2.48 Chép hình ảnh vào Project
Tiếp theo bạn từ Utility area, bạn kéo thả đối tượng UIImage View vào Interface Builder, điều chỉnh kích thước UIImage View cho vừa với màn hình.
Hình 2.50 Lựa chọn hình ảnh làm background
Kết quả khi chạy ứng dụng:
Hình 2.51 Thay đổi background bằng image
Background Color
Ngoài việc sử dụng hình ảnh làm background cho ứng dụng, nếu bạn yêu thích sự đơn giản, bạn có thể tạo background bằng cách dùng một màu mà bạn ưa thích. Trong
Hình 2.52 Attributes inspector
Tại đây bạn cho hiện ra bảng màu để chọn lựa với nhiều màu khác nhau, hãy lựa chọn cho mình một màu phù hợp, nếu muốn nhiều màu hơn có thể chọn Other.
Hình 2.53 Chọn màu
Hình 2.55 Link Frameworks and Libraries
Bạn nhấp chuột vào biểu tượng dấu cộng để mở ra bảng danh mục các framework mà Xcode hỗ trợ.
Hình 2.56 Chọn Framework
2.4 Một số đối tƣợng cơ bản
Chương này trình bày một số đối tượng cơ bản thường được sử dụng để viết ứng dụng cho iOS. Qua chương này, bạn có thể nắm được chức năng cũng như cách sử dụng một số đối tượng cơ bản, từ đó có thể vận dụng vào viết ứng dụng. Do khả năng của người viết còn giới hạn nên số đối tượng được giới thiệu trong chương này vẫn còn hạn chế.
2.4.1 Đối Tượng Label
Label dùng để hiển thị một nội dung là chữ/câu/đoạn văn có tính cố định ít thay đổi.
Hình 2.58 Label
Label cho phép người dùng thay đổi một số thuộc tính để hiển thị nội dung ra giao diện cho phù hợp như tùy chỉnh màu chữ, font và kích thước, canh trái/giữa/phải hay cho nội dung của label xuống dòng.
Hình 2.60 Button
Với button, bạn có thể lựa chọn một số định dạng button có sẵn, hoặc tùy chọn một dạng button khác theo ý bạn. Không những thế bạn còn có thể tùy chỉnh font chữ, màu chữ, màu nền của button hoặc thay thế button theo mộ hình ảnh button được thiết kế trước.
Hình 2.61 Thuộc tính của button
2.4.3 Đối Tượng Text Field
Đối tượng Text field thường được sử dụng để người dùng nhập dữ liệu đầu vào cho ứng dụng. Chẳng hạn như bạn viết chương trình tính tổng hai số, thì bạn sẽ dùng Text field để người dùng nhập vào hai số cần tính tổng, và bạn sẽ sử dụng giá trị nhập
Hình 2.62 Text Field
Text field cho phép tùy chỉnh canh lề trái/giữa/phải, tùy chỉnh font chữ và kích thước chữ trong Text field. Hơn nữa, bạn có thể tùy chỉnh hình dạng của Text field, cũng như định dạng nội dung gợi ý cho người dùng (placeholder).
số người thậm chí không đưa được con chim trong trò chơi bay nổi qua lỗ đầu tiên. Trò này khó đến nỗi khiến người chơi vừa bực mình lại vừa buồn cười, vừa thấy khó chơi nhưng lại vô cùng thú vị. Những bình luận trong App Store cho thấy, người chơi vừa ghét lại cũng rất thích Flappy Bird. Và đây có lẽ chính là lý do hàng đầu cho thành công của trò chơi…”
Tình cờ biết đến game Flappy Bird trên mạng của anh Nguyễn Hà Đông, ngay từ lần đầu em đã có ý định tìm hiểu lập trình IOS, với sự đam mê của mình, sau một thời gian suy nghĩ, em quyết định nghiên cứu và tạo ra trò chơi này.
3.2 Mô hình hóa yêu cầu
3.2.1 Xác định các tác nhân
Vì phần mềm dùng trên điện thoại nên chỉ có một tác nhân là người dùng.
3.2.2 Xác định các trường hợp sử dụng (Use case)
3.2.2.1 Liệt kê các trường hợp sử dụng
- Khởi động ứng dụng - Xem hướng dẫn - Nhập tên người chơi - Chơi game
- Đóng ứng dụng
3.2.2.2 Đặc tả các trường hợp sử dụng
Khởi động ứng dụng: - Tác nhân: Người dùng.
- Mô tả: Khi bắt đầu chơi game thì người dùng cần phải khởi động ứng dụng. Tùy chọn xem hướng dẫn.
-Tác nhân: Người dùng.
Nhập tên người chơi: - Tác nhân: Người dùng
- Mô tả: Người dùng nhập tên của mình vào ô Tên của bạn để bắt đầu chơi. Chơi game:
-Tác nhân: Người dùng
-Mô tả: Khi chọn mục Play thì người chơi sẽ bắt đầu chơi game. Đóng ứng dụng:
- Tác nhân: Người dùng.
- Mô tả: Khi chơi xong người dùng sẽ đóng ứng dụng.
3.2.2.3 Biểu đồ trường hợp sử dụng
Biểu đồ trường hợp sử dụng Người dùng
Mo_Ung_Dung Dong_Ung_Dung
Choi_Game
Nhap_Ten_Nguoi_Choi Nguoi_Choi
Xem_Huong_Dan
: FrmKhoiDongUngDung : FrmDongUngDung : FrmChoiGame
: FrmNhapTenNguoiChoi : FrmXemHuongDan
Hình 3.2 Các lớp biên
3.3.2 Các lớp điều khiển
Lớp điều khiển là lớp làm nhiệm vụ điều khiển mọi hoạt động của các lớp khác. Tương ứng với mỗi Use Case có thể sẽ có một lớp điều khiển làm nhiệm vụ gửi thông điệp cho các lớp liên quan.
Ứng dụng Game có những lớp điều khiển sau:
: CtlKhoiDongUngDung : CtlDongUngDung : CtlChoiGame
: CtlNhapTenNguoiChoi : CtlXemHuongDan
3.4. Biểu đồ hoạt động Play Xem Huong Dan Choi Game Hình 3.4 Biểu đồ hoạt động
Trò chơi được trình bày theo phong cách side-scroller (phong cách game với các đối tượng được nhìn thấy ở mặt bên (side-view) và di chuyển từ cạnh trái sang cạnh phải của màn hình), trong đó người chơi điều khiển một chú chim, cố gắng vượt