MỤC LỤC LỜI CAM ĐOAN 1 LỜI CẢM ƠN 2 MỞ ĐẦU 1 CHƯƠNG 1: TỔNG QUAN HỆ ĐIỀU HÀNH IOS VÀ NGÔN NGỮ LẬP TRÌNH SWIFT 3 1.1. Tổng quan về IOS 3 1.1.1 Giới thiệu về hệ điều hành IOS 3 1.1.2 Sự phát triển của iOS 4 1.2 Tổng quan về ứng dụng iOS 7 1.2.1 Cấu trúc ứng dụng iOS 7 1.2.2 Các trạng thái của ứng dụng iOS 9 1.2.3 Vòng đời của UIViewController 11 1.3. Ngôn ngữ lập trình Swift 12 1.3.1.Giới thiệu về ngôn ngữ Swift. 14 1.3.2. Array và Dictionary (Mảng và Từ điển) 18 1.3.3. Cấu trúc điều khiển 19 1.3.4. Hàm 20 1.3.5. Closure (Kết thúc) 21 1.3.6. Enumeration ( Liệt kê) 22 1.3.7. Classes and Structure (Lớp và cấu trúc) 23 1.3.8. Subscript 24 1.3.9. Inheritance(Kế Thừa) 25 1.3.10. Subclass(lớp con) 26 1.3.11. Mothod and Property (phương thức và thuộc tính) 26 1.3.12. Handling Error (đối phó với lỗi) 27 CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ ỨNG DỤNG TÌM ĐƯỜNG ĐI 28 2.1. Mô tả bài toán 28 2.2. Quy trình nghiệp vụ. 28 2.3. Yêu cầu chức năng 28 2.4. Yêu cầu phi chức năng 29 2.5. Liệt kê tác nhân và ca làm việc của ứng dụng. 29 2.5.1. Đặc tả các ca làm việc 29 2.5.2. Biểu đồ Use case đặc tả ca làm việc của ứng dụng 31 2.6. Sơ đồ Use case các chức năng của ứng dụng 32 2.6.1. Sơ đồ Use case chức năng hiển thị bản đồ 32 2.6.2. Sơ đồ Use case chức năng định vị vị trí thiết bị 32 2.6.3. Sơ đồ Use case chức năng định vị các địa điểm tham chiếu 32 2.6.4. Sơ đồ use case chức năng tìm kiếm chỉ đường 33 2.6.5. Sơ đồ use case chức năng tìm kiếm đường đi ngắn nhất 33 2.7. Biểu đồ tuần tự 33 2.7.1. Biểu đồ tuần tự định vị vị trí hiện tại 33 2.7.2. Biểu đồ tuần tự định vị các địa điểm tham chiếu khác 34 2.7.3. Biểu đồ tuần tự tìm kiếm đường đi ngắn nhất 35 2.8. Biểu đồ hoạt động 37 2.8.1. Biểu đồ hoạt động định vị vị trí hiện tại 37 2.8.2. Biểu đồ hoạt động định vị các địa điểm tham chiếu 38 2.8.3. Biểu đồ hoạt động tìm kiếm chỉ đường 39 CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG BẢN ĐỒ TÌM KIẾM ĐƯỜNG ĐI 40 3.1. Thiết kế chương trình ứng dụng 40 3.1.1. Xcode IDE 40 3.1.2. Playground trong swift 43 3.1.4. File viewcontroller 51 3.1.5. File code AddressTableView 52 3.1.6. File Code DirectionsViewController 52 3.1.7. Config Project 53 3.1.8. File code DirectionsTableView 54 3.2. Thiết kế giao diện của ứng dụng 54 3.2.1. Giao diện chính chỉ đường 54 3.2.2. Giao diện hiển thị kết quả 55 3.2.3. Giao diện nhập điểm đầu cuối 56 3.2.4. Giao diện tìm kiếm địa điểm 57 3.2.5. Giao diện màn hình chỉ đường chi tiết 57 KẾT LUẬN 59 TÀI LIỆU THAM KHẢO 60 PHỤ LỤC 61
Trang 1Em xin cam đoan đây là đề tài nghiên cứu của riêng em và được sựhướng dẫn khoa học của TS Trần Cảnh Dương Các nội dung nghiên cứu, kếtquả trong đề tài này là trung thực và chưa công bố dưới bất kỳ hình thức nàotrước đây Những số liệu trong các bảng biểu phục vụ cho việc phân tích,nhận xét, đánh giá được chính tác giả thu thập từ các nguồn khác nhau có ghi
rõ trong phần tài liệu tham khảo
Ngoài ra, trong đồ án còn sử dụng một số nhận xét, đánh giá cũng như sốliệu của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn Nếu phát hiện có bất kỳ sự gian lận nào em xin hoàn toàn chịu trách nhiệm vềnội dung đồ án của mình Trường đại học Tài nguyên và Môi trường cùngKhoa Công nghệ thông tin không liên quan đến những vi phạm tác quyền, bảnquyền do em gây ra trong quá trình thực hiện (nếu có)
Em xin chân thành cảm ơn!
Sinh viên
Nguyễn Quốc Toản
Trang 2Trên thực tế không có sự thành công nào mà không gắn liền với những
sự giúp đỡ mọi người dù ít hay nhiều, dù trực tiếp hay gián tiếp Trong suốtthời gian học tập nhất là trong quá trình làm đồ án, em đã nhận được rất nhiều
sự quan tâm giúp đỡ nhiệt tình của các thầy cô, bạn bè và gia đình
Đầu tiên em xin gửi lời cảm ơn sâu sắc đến thầy TS Trần Cảnh Dương,thầy đã trực tiếp hướng dẫn và giúp đỡ em rất nhiều trong thời gian em làmkhóa luận này
Em cũng xin gửi lời cảm ơn đến thầy TS Hà Mạnh Đào, Trưởng khoacông nghệ thông tin, cùng các thầy cô giáo trong Khoa Công nghệ thông tin
đã nhiệt tình giúp đỡ em trong quá trình học tập tại trường
Cuối cùng, em xin gửi lời cảm ơn chân thành tới gia đình và bạn bè đãluôn giúp đỡ, động viên và tạo điều kiện tốt nhất cho em trong suốt quá trìnhhọc tập cũng như trong cuộc sống
Vì năng lực có hạn nên bài báo cáo của em còn nhiều hạn chế và khôngthể tránh khỏi những thiếu sót, mong thầy cô và các bạn có những ý kiến đónggóp để em có thể hoàn thiện và phát triển đề tài hơn
Em xin chân thành cảm ơn!
Sinh viên
Nguyễn Quốc Toản
Trang 3LỜI CAM ĐOAN 1
LỜI CẢM ƠN 2
MỞ ĐẦU 1
CHƯƠNG 1: TỔNG QUAN HỆ ĐIỀU HÀNH IOS VÀ NGÔN NGỮ LẬP TRÌNH SWIFT 3
1.1 Tổng quan về IOS 3
1.1.1 Giới thiệu về hệ điều hành IOS 3
1.1.2 Sự phát triển của iOS 4
1.2 Tổng quan về ứng dụng iOS 7
1.2.1 Cấu trúc ứng dụng iOS 7
1.2.2 Các trạng thái của ứng dụng iOS 9
1.2.3 Vòng đời của UIViewController 10
1.3 Ngôn ngữ lập trình Swift 12
1.3.1.Giới thiệu về ngôn ngữ Swift 13
1.3.2 Array và Dictionary (Mảng và Từ điển) 17
1.3.3 Cấu trúc điều khiển 18
1.3.4 Hàm 19
1.3.5 Closure (Kết thúc) 20
1.3.6 Enumeration ( Liệt kê) 21
1.3.7 Classes and Structure (Lớp và cấu trúc) 22
1.3.8 Subscript 23
1.3.9 Inheritance(Kế Thừa) 24
1.3.10 Subclass(lớp con) 24
1.3.11 Mothod and Property (phương thức và thuộc tính) 25
1.3.12 Handling Error (đối phó với lỗi) 25
Trang 42.2 Quy trình nghiệp vụ 26
2.3 Yêu cầu chức năng 26
2.4 Yêu cầu phi chức năng 27
2.5 Liệt kê tác nhân và ca làm việc của ứng dụng 27
2.5.1 Đặc tả các ca làm việc 27
2.5.2 Biểu đồ Use case đặc tả ca làm việc của ứng dụng 29
2.6 Sơ đồ Use case các chức năng của ứng dụng 29
2.6.1 Sơ đồ Use case chức năng hiển thị bản đồ 29
2.6.2 Sơ đồ Use case chức năng định vị vị trí thiết bị 30
2.6.3 Sơ đồ Use case chức năng định vị các địa điểm tham chiếu 30
2.6.4 Sơ đồ use case chức năng tìm kiếm chỉ đường 31
2.6.5 Sơ đồ use case chức năng tìm kiếm đường đi ngắn nhất 31
2.7 Biểu đồ tuần tự 31
2.7.1 Biểu đồ tuần tự định vị vị trí hiện tại 31
2.7.2 Biểu đồ tuần tự định vị các địa điểm tham chiếu khác 32
2.7.3 Biểu đồ tuần tự tìm kiếm đường đi ngắn nhất 33
2.8 Biểu đồ hoạt động 35
2.8.1 Biểu đồ hoạt động định vị vị trí hiện tại 35
2.8.2 Biểu đồ hoạt động định vị các địa điểm tham chiếu 36
2.8.3 Biểu đồ hoạt động tìm kiếm chỉ đường 37
CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG BẢN ĐỒ TÌM KIẾM ĐƯỜNG ĐI 38
3.1 Thiết kế chương trình ứng dụng 38
3.1.1 Xcode IDE 38
3.1.2 Playground trong swift 41
3.1.4 File viewcontroller 49
Trang 53.1.6 File Code DirectionsViewController 50
3.1.7 Config Project 51
3.1.8 File code DirectionsTableView 52
3.2 Thiết kế giao diện của ứng dụng 52
3.2.1 Giao diện chính chỉ đường 52
3.2.2 Giao diện hiển thị kết quả 53
3.2.3 Giao diện nhập điểm đầu cuối 54
3.2.4 Giao diện tìm kiếm địa điểm 55
3.2.5 Giao diện màn hình chỉ đường chi tiết 55
KẾT LUẬN 57
TÀI LIỆU THAM KHẢO 58
PHỤ LỤC 59
Trang 6LỜI CAM ĐOAN 1
LỜI CẢM ƠN 2
MỞ ĐẦU 1
CHƯƠNG 1: TỔNG QUAN HỆ ĐIỀU HÀNH IOS VÀ NGÔN NGỮ LẬP TRÌNH SWIFT 3
1.1 Tổng quan về IOS 3
1.1.1 Giới thiệu về hệ điều hành IOS 3
1.1.2 Sự phát triển của iOS 4
1.2 Tổng quan về ứng dụng iOS 7
1.2.1 Cấu trúc ứng dụng iOS 7
Hình 1.1 Các đối tượng cơ bản của một ứng dụng iOS 8
1.2.2 Các trạng thái của ứng dụng iOS 9
Hình 1.2 Vòng đời của một ứng dụng iOS 10
1.2.3 Vòng đời của UIViewController 10
Hình 1.3 Vòng đời của một UIViewController 11
1.3 Ngôn ngữ lập trình Swift 12
Hình 1.4 Ngôn ngữ lập trình Swif 12
Hình 1.5 Đoạn mã lệnh viết bằng Swif 13
1.3.1.Giới thiệu về ngôn ngữ Swift 13
1.3.2 Array và Dictionary (Mảng và Từ điển) 17
1.3.3 Cấu trúc điều khiển 18
1.3.4 Hàm 19
1.3.5 Closure (Kết thúc) 20
1.3.6 Enumeration ( Liệt kê) 21
1.3.7 Classes and Structure (Lớp và cấu trúc) 22
1.3.8 Subscript 23
Trang 71.3.10 Subclass(lớp con) 24
1.3.11 Mothod and Property (phương thức và thuộc tính) 25
1.3.12 Handling Error (đối phó với lỗi) 25
2.1 Mô tả bài toán 26
2.2 Quy trình nghiệp vụ 26
2.3 Yêu cầu chức năng 26
2.4 Yêu cầu phi chức năng 27
2.5 Liệt kê tác nhân và ca làm việc của ứng dụng 27
2.5.1 Đặc tả các ca làm việc 27
Bảng 2.1 Đặc tả ca làm việc truy cập ứng dụng 27
Ca làm việc nhập thông tin địa điểm được đặc tả ở bảng 2.2 28
Bảng 2.2 Đặc tả ca làm việc nhập thông tin địa điểm 28
Bảng 2.3 Đặc tả ca làm việc định vị các địa điểm tham chiếu 28
Ca làm việc tìm kiếm chỉ đường được đặc tả ở bảng 2.4 28
Bảng 2.4 Đặc tả ca làm việc tìm kiếm chỉ đường 28
2.5.2 Biểu đồ Use case đặc tả ca làm việc của ứng dụng 29
Hình 2.1 Biểu đồ Use case đặc tả ca làm việc của ứng dụng 29
2.6 Sơ đồ Use case các chức năng của ứng dụng 29
2.6.1 Sơ đồ Use case chức năng hiển thị bản đồ 29
Hình 2.2 Sơ đồ use case chức năng hiển thị bản đồ 30
2.6.2 Sơ đồ Use case chức năng định vị vị trí thiết bị 30
Hình 2.3 Sơ đồ use case chức năng định vị vị trí hiện tại 30
2.6.3 Sơ đồ Use case chức năng định vị các địa điểm tham chiếu 30
Hình 2.4 Sơ đồ use case chức năng định vị các địa điểm tham chiếu 31
2.6.4 Sơ đồ use case chức năng tìm kiếm chỉ đường 31
2.6.5 Sơ đồ use case chức năng tìm kiếm đường đi ngắn nhất 31
Hình 2.6 Sơ đồ use case chức năng tìm kiếm đường đi ngắn nhất 31
2.7 Biểu đồ tuần tự 31
Trang 8Hình 2.7 Biểu đồ tuần tự định vị vị trí hiện tại 32
2.7.2 Biểu đồ tuần tự định vị các địa điểm tham chiếu khác 32
Hình 2.8 Biểu đồ tuần tự định vị các địa điểm tham chiếu 33
2.7.3 Biểu đồ tuần tự tìm kiếm đường đi ngắn nhất 33
Hình 2.9 Biểu đồ tuần tự tìm kiếm đường đi ngắn nhất 34
2.8 Biểu đồ hoạt động 35
2.8.1 Biểu đồ hoạt động định vị vị trí hiện tại 35
Hình 2.10 Biểu đồ hoạt động định vị vị trí hiện tại 35
2.8.2 Biểu đồ hoạt động định vị các địa điểm tham chiếu 36
Hình 2.11 Biểu đồ hoạt động định vị các địa điểm tham chiếu 36
2.8.3 Biểu đồ hoạt động tìm kiếm chỉ đường 37
Hình 2.12 Biểu đồ hoạt động tìm kiếm chỉ đường 37
CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG BẢN ĐỒ TÌM KIẾM ĐƯỜNG ĐI 38
3.1 Thiết kế chương trình ứng dụng 38
3.1.1 Xcode IDE 38
Hình 3.1 Giao diện làm việc của Xcode 39
3.1.2 Playground trong swift 41
Hình 3.2 khởi tạo file mới 41
Hình 3.3 Nhập tên file 42
Hình 3.4 Hiển thị giao diện code 42
Hình 3.5 Màn hình playground 43
Hình 3.6 Hiển thị file Playground 44
Hình 3.7 Màn hình Utilities 45
Hình 3.8 Màn hình Editor 45
Hình 3.9 Định dạng comment trong Playground 46
Hình 3.10 Hướng dẫn sử dụng Playground 47
Hình 3.11 Cửa sổ thể hiện kết quả 48
Hình 3.12 Cửa sổ kết quả 48
Trang 93.1.5 File code AddressTableView 50
Hình 3.15 File code AddressTableView 50
3.1.6 File Code DirectionsViewController 50
Hình 3.16 File Code DirectionsViewController 51
3.1.7 Config Project 51
Hình 3.17 Config Project 51
3.1.8 File code DirectionsTableView 52
Hình 3.18 file code DirectionsTableView 52
3.2 Thiết kế giao diện của ứng dụng 52
3.2.1 Giao diện chính chỉ đường 52
Hình 3.19 Giao diện chỉ đường 53
3.2.2 Giao diện hiển thị kết quả 53
Hình 3.20 Giao diện hiển thị kết quả 54
3.2.3 Giao diện nhập điểm đầu cuối 54
Hình 3.21 Giao diện nhập điểm đầu và điểm cuối 55
3.2.4 Giao diện tìm kiếm địa điểm 55
Hình 3.22 Giao diện tìm kiếm địa điểm 55
3.2.5 Giao diện màn hình chỉ đường chi tiết 55
Hình 3.23 Giao diện màn hình chỉ đường chi tiết 56
Kết luận chương: chương 3 đề cập tới ứng dụng sử dụng Mapkit làm cơ sở dữ liệu cho ứng dụng và thiết kế ứng dụng, giao diện như thế nào một các trân thực nhất Ngoài ra chỉ ra cách tạo 1 Project trong Xcode và Xcode IDE 56
KẾT LUẬN 57
TÀI LIỆU THAM KHẢO 58
PHỤ LỤC 59
Trang 10Hình 1.1 Các đối tượng cơ bản của một ứng dụng iOS 8
Hình 1.2 Vòng đời của một ứng dụng iOS 10
Hình 1.3 Vòng đời của một UIViewController 11
Hình 1.4 Ngôn ngữ lập trình Swift 12
Hình 1.5 Đoạn mã lệnh viết bằng Swift 13
Bảng 2.1 Đặc tả ca làm việc truy cập ứng dụng 27
Ca làm việc nhập thông tin địa điểm được đặc tả ở bảng 2.2 28
Bảng 2.2 Đặc tả ca làm việc nhập thông tin địa điểm 28
Bảng 2.3 Đặc tả ca làm việc định vị các địa điểm tham chiếu 28
Ca làm việc tìm kiếm chỉ đường được đặc tả ở bảng 2.4 28
Bảng 2.4 Đặc tả ca làm việc tìm kiếm chỉ đường 28
Hình 2.1 Biểu đồ Use case đặc tả ca làm việc của ứng dụng 29
Hình 2.2 Sơ đồ use case chức năng hiển thị bản đồ 30
Hình 2.3 Sơ đồ use case chức năng định vị vị trí hiện tại 30
Hình 2.4 Sơ đồ use case chức năng định vị các địa điểm tham chiếu 31
Hình 2.6 Sơ đồ use case chức năng tìm kiếm đường đi ngắn nhất 31
Hình 2.7 Biểu đồ tuần tự định vị vị trí hiện tại 32
Hình 2.8 Biểu đồ tuần tự định vị các địa điểm tham chiếu 33
Hình 2.9 Biểu đồ tuần tự tìm kiếm đường đi ngắn nhất 34
Hình 2.10 Biểu đồ hoạt động định vị vị trí hiện tại 35
Hình 2.11 Biểu đồ hoạt động định vị các địa điểm tham chiếu 36
Hình 2.12 Biểu đồ hoạt động tìm kiếm chỉ đường 37
Hình 3.1 Giao diện làm việc của Xcode 39
Hình 3.2 khởi tạo file mới 41
Hình 3.3 Nhập tên file 42
Hình 3.4 Hiển thị giao diện code 42
Hình 3.5 Màn hình playground 43
Trang 11Hình 3.8 Màn hình Editor 45
Hình 3.9 Định dạng comment trong Playground 46
Hình 3.10 Hướng dẫn sử dụng Playground 47
Hình 3.11 Cửa sổ thể hiện kết quả 48
Hình 3.12 Cửa sổ kết quả 48
Hình 3.13 Cấu trúc thư mục project 49
Hình 3.15 File code AddressTableView 50
Hình 3.16 File Code DirectionsViewController 51
Hình 3.17 Config Project 51
Hình 3.18 file code DirectionsTableView 52
Hình 3.19 Giao diện chỉ đường 53
Hình 3.20 Giao diện hiển thị kết quả 54
Hình 3.21 Giao diện nhập điểm đầu và điểm cuối 55
Hình 3.22 Giao diện tìm kiếm địa điểm 55
Hình 3.23 Giao diện màn hình chỉ đường chi tiết 56
Kết luận chương: chương 3 đề cập tới ứng dụng sử dụng Mapkit làm cơ sở dữ liệu cho ứng dụng và thiết kế ứng dụng, giao diện như thế nào một các trân thực nhất Ngoài ra chỉ ra cách tạo 1 Project trong Xcode và Xcode IDE 56
Trang 12MỞ ĐẦU
Thế kỉ 21 là thế kỉ của công nghệ, ngành công nghệ thông tin vốn đã đisâu vào đời sống con người từ rất lâu, ngành nghệ này phục vụ cho mọi lĩnhvực của đời sống, xã hội Việc quản lý giáo dục, y tế hay quân đội… đếnnhững sinh hoạt hàng ngày như đọc báo, xem phim, mua sắm… cũng cần đếncông nghệ thông tin Mấy năm gần đây, ngành học công nghệ thông tin cũng “hot “ trở lại sau cơn bão ngành tài chính, ngân hàng
Ngành công nghệ thông tin như chúng ta đã biết thì rất đa dạng và nhiềumảng, chúng chia ra để phục vụ nhu cầu con người, như mạng truyền thông,lập trình web, khai phá dữ liệu, khoa học máy tính, tin văn phòng… Ngànhlập trình di động Android, IOS, WindowPhone cũng đã và đang tràn ngập vàothị trường CNTT của Việt Nam, chứng minh là ở nước ta dịch vụ điện thoại diđộng ngày một tăng, các dòng điện thoại ngày một đa dạng, hơn thế nữa cácphần mềm điện thoại ngày càng hiện đại, phong phú, phục vụ nhiều nhu cầucủa con người khi tiếp xúc với di động Chiếc điện thoại di động không cònchỉ để nghe, gọi, gửi tin nhắn mà chúng ta còn có thể truy cập mạng xã hội,trải nghiệp các ứng dụng của Google map, các ứng dụng phục vụ thiết thựccho công việc, vui chơi, giải trí…
Hiện nay, các hãng di động mang hệ điều hành IOS đang dần chiếm thịphần lớn ở hầu hết các quốc gia, lấn mặt hai anh em khác là Android vàWindowPhone Chính vì thế lập trình IOS vẫn là một mảng lập trình “ hot”hiện nay, không chỉ ở Việt Nam mà còn phát triển từ rất lâu trên thế giới.Con người sử dụng điện thoại di động với các mục đích khác nhau,người đọc báo, người xem phim, người mua hàng trực tuyến, người chơigame, người lại sử dụng các tiện ích của bản đồ tìm kiếm đường đi… muônhình muôn vẻ Bản thân em là người hay có nhu cầu đi lại nên có một ứngdụng chỉ đường trên chính chiếc smartphone của mình là hết sức cần thiết vậy
Trang 13nên em đã quyết định chọn đề tài: “Nghiên cứu và xây dựng phần mềm bản
đồ tìm kiếm đường đi cho hệ điều hành IOS”
Mục tiêu của đề tài nhằm xây dựng một chương trình phần mềm bản đồ tìmkiếm đường đi trên nền tảng IOS
Đồ án gồm phần mở đầu, phần kết luận và ba chương:
- Chương 1 Tổng quan hệ điều hành IOS và ngôn ngữ lập trình Swift:chương này trình bày những kiến thức cơ bản về hệ điều hành IOS vàngôn ngữ lập trình Swift
- Chương 2 Phân tích thiết kế chương trình phần mềm bản đồ tìm kiếmđường đi: chương này trình bày quy trình nghiệp vụ và các chức năngcủa phần mềm bản đồ tìm kiếm đường đi
- Chương 3 Xây dựng chương trình phần mềm bản đồ tìm kiếm đường đi:trình bày việc thiết kế phần mềm và giao diện của phần mềm
Trang 14CHƯƠNG 1: TỔNG QUAN HỆ ĐIỀU HÀNH IOS VÀ NGÔN NGỮ LẬP
TRÌNH SWIFT
1.1 Tổng quan về IOS
1.1.1 Giới thiệu về hệ điều hành IOS
IOS là hệ điều hành trên các thiết bị di động của Apple Ban đầu hệ điềuhành này chỉ được phát triển để chạy trên iPhone (gọi là iPhone OS), nhưngsau đó nó đã được mở rộng để chạy trên các thiết bị của Apple như iPodtouch, iPad và Apple TV Ngày 31 tháng 5, 2011, App Store của Apple chứakhoảng 500 000 ứng dụng iOS, và được tải về tổng cộng khoảng 15 tỷ lần.Trong quý 4 năm 2010, có khoảng 26% điện thoại thông minh chạy hệ điềuhành iOS
Giao diện người dùng của iOS dựa trên cơ sở thao tác bằng tay Ngườidùng có thể tương tác với hệ điều hành này thông qua rất nhiều động tác bằngtay trên màn hình cảm ứng của các thiết bị của Apple
Phiên bản mới nhất của iOS là 9.3 ra ngày 21 tháng 3 năm 2016, dànhcho các thiết bị iPhone 4S, iPod 5, iPad 2, iPad Mini (thế hệ thứ nhất) trở lên
và iPad Pro
Hệ điều hành này được tiết lộ tại Hội nghị và Triển lãm Macworld diễn
ra vào 9 tháng 1 năm 2007 và được phát hành vào tháng 9 năm đó Khi đó, hệđiều hành này chưa có một cái tên riêng nên chỉ đơn giản là "iPhone chạy OSX" Ban đầu, ứng dụng bên thứ ba không được hỗ trợ Steve Jobs đã chỉ rarằng những nhà phát triển có thể xây dựng các ứng dụng web mà "sẽ cư xửnhư những ứng dụng ban đầu trên iPhone" Vào ngày 17 tháng 10 năm 2007,Apple thông báo một bộ phát triển phần mềm đang được xây dựng và họ dựđịnh sẽ đưa nó đến "tay của các nhà phát triển vào tháng 2" Ngày 6 tháng 3năm 2008, Apple đã phát hành bản dùng thử đầu tiên, cùng với một cái tênmới cho hệ điều hành, đó là "iPhone OS".[1]
Trang 151.1.2 Sự phát triển của iOS
Cũng như máy tính, smartphone sẽ trở nên vô nghĩa nếu thiếu phần hồn
là hệ điều hành (HĐH) Vào năm 2007, Apple đã ghi lại dấu mốc làm thay đổicuộc chơi di động với việc giới thiệu chiếc smartphone đầu tiên của mình vàHĐH di động đầu tiên trên thế giới Kể từ đó, iOS (ban đầu Apple gọi làiPhone OS) đã phát triển liên tục trong suốt hơn 8 năm qua cùng với chiếciPhone, lần lượt giới thiệu những tính năng mà nhiều người sử dụng khôngthể tưởng tượng trước khi được trải nghiệm, như iMessage, App Store,FaceTime, Siri, iCloud, Apple Pay…
Giờ là lúc chúng ta hãy cùng nhau khám phá sự tiến hóa của iOS và cáchthức HĐH đã định hình chức năng cho iPhone và các thiết bị chạy iOS kháccủa Apple như iPad và iPod Touch
iOS 1
HĐH di động lấy màn hình cảm ứng làm trung tâm đầu tiên trên thế giớiđược cựu CEO Steve Jobs của Apple công bố lần đầu vào ngày 9/1/2007 cùngvới chiếc iPhone phiên bản đầu tiên Cho đến lúc đó nó chưa được nhìn nhận
là HĐH, và Jobs gọi đây là “phần mềm” chạy một phiên bản di động củaHĐH OS X vốn dành cho máy Mac của Apple Phần mềm bao gồm các tínhnăng đa cử chỉ cảm ứng, thư thoại có hình, duyệt web di động trên Safari vàYouTube
Đến tháng 1/2008, phần mềm được cập nhật thêm màn hình chủ (home)tùy biến, cho phép người dùng chuyển các ứng dụng tới những trang riêngtrên thiết bị và đem đến cho người dùng máy nghe nhạc iPod Touch nhữngứng dụng mới như Mail, Maps, Weather, Notes và Stocks Apple miễn phí cậpnhật cho người dùng iPhone, nhưng người dùng iPod Touch phải trả 19,99USD
Trang 16iOS 2
Sau khi phát hành iPhone SDK vào ngày 6/3/2008, Apple đã chính thứcxác nhận HĐH di động của mình, gọi là iPhone OS iPhone OS 2 được cài sẵncho iPhone 3G mới ra mắt năm này, và cung cấp các tính năng đáng chú ýnhư App Store, chỉ đường chi tiết dựa trên GPS và push email
Bản cập nhật này miễn phí cho người dùng iPhone và tính phí 9,95 USDđối với người dùng iPod Touch (sau đó miễn phí lên iPhone OS 2.x)
iOS 3
iPhone OS 3 chính thức xuất hiện cùng phiên bản iPhone 3GS với nhiềutính năng mới, như: điều khiển bằng giọng nói, nhắn tin đa phương tiện, tìmkiếm nhanh Spotlight search, bàn phím xoay ngang, và nổi bật là các chứcnăng cắt, sao chép và dán
Sau khi Apple giới thiệu iPad vào tháng 3/2010, iPhone OS trở thànhiOS iOS 3 miễn phí với người dùng iPhone, nhưng người dùng iPod Touchvẫn phải trả 9,95 USD và miễn phí nâng cấp về sau iPad phiên bản đầu tiênđáp xuống thị trường với iOS 3.2 được cài sẵn
Với người dùng iPod Touch chưa nâng cấp lên iOS 3, được giảm giáxuống chỉ còn 4,95 USD để nâng cấp lên iOS 3.2
iOS 4
iOS 4 được cài sẵn cho iPhone 4 và iPad 2 Chính thức được đổi tênthành ‘iOS,’ HĐH di động của Apple có hình nền, khả năng chạy đa nhiệm,quản lý ứng dụng theo Folders (thư mục), và tính năng thoại có hìnhFaceTime, và iBooks cho iPad
Với iOS 4, lần đầu tiên người dùng iPod Touch phiên bản cũ hơn đượcnâng cấp miễn phí iPhone 4 cũng là chiếc điện thoại CDMA đầu tiên củaApple (cho người dùng mạng Verizon, Mỹ)
Trang 17iOS 5
Được cài sẵn cho iPhone 4S, ra mắt sau một tuần “thầy phù thủy” SteveJobs qua đời, iOS 5 trình làng trợ lý ảo Siri cùng các tính năng NotificationCenter, iMessage, Reminders và Newsstand
iOS 5 trở nên nổi tiếng vì người dùng có thể kích hoạt và cài đặt thiết bịcủa mình mà không cần cáp nối với máy tính và cập nhật qua mạng khôngdây iOS 5 còn gây sự chú ý khi tích hợp sẵn iCloud và Twitter
iOS 6
iOS 6 cài sẵn trên iPhone 5 và iPad mini Phiên bản này “bỏ rơi” GoogleMaps và YouTube, người dùng muốn có thì phải tự tải về từ App Store iOS 5dùng ứng dụng bản đồ Maps do chính Apple phát triển, với khả năng chỉđường chi tiết (turn-by-turn navigation), cũng như tích hợp sẵn Facebook,Passbook và hỗ trợ kết nối mạng LTE
iOS 7
Sau khi thất bại với ứng dụng Maps gây nhiều tranh cãi trên iOS 6, Phóchủ tịch cấp cao phụ trách thiết kế của Apple, Jonathan Ive, đã thiết kế lại iOSsau sự ra đi của cựu Phó chủ tịch cấp cao về phần mềm iOS, Scott Forstall.iOS 7 không còn dùng đồ họa theo phong cách thiết kế mô phỏng nhưtrước mà đã được làm mới với thiết kế phẳng, theo đó các icon nhiều màu sắchơn, giảm độ sâu, chữ đơn giản và sắc nét dễ nhìn
Được cài sẵn trên iPhone 5S, iPhone 5C, iPad Air và iPad mini 2, phiênbản HĐH mới theo phong cách phẳng có các tính năng đáng chú ý nhưControl Center, AirDrop for iOS, ứng dụng Photos cải tiến, iTunes Radio vàCarPlay
iOS 8
iOS 8 xuất hiện cùng bộ đôi iPhone 6 và 6 Plus, và cũng được cài trêniPad Air 2 Những tính năng mới đánh chú ý là thanh toán điện tử Apple Pay,
Trang 18ứng dụng Health mới, HandOff, QuickType, Family Sharing, iCloud Drive,
hỗ trợ bàn phím của bên thứ ba và mới thêm Apple Music hồi giữ năm nay.iOS 8 là phiên bản iOS đầu tiên được Apple tung ra bản thử nghiệm betacho các nhà phát triển bên ngoài trước khi phát hành bản chính thức
Passbook được đổi thành Wallet và hỗ trợ thẻ khách hàng thân thiết vàthẻ quà tặng
Với iOS 9, iPad có các tính năng tăng cường cho đa nhiệm, như: SlideOver và Split View cho phép chia màn hình để các ứng dụng chạy đồng thời;Picture in Picture để xem video (ở góc màn hình) trong khi đang chạy ứngdụng khác; và hỗ trợ phím tắt cut/copy và paste cho bàn phím không dây.iOS 9 giúp nâng cao thời lượng sử dụng pin (thêm khoảng 1 giờ) và cóchế độ tiết kiệm năng lượng “Low Power Mode”, passcode dài 6 ký tự để tăngcường bảo mật, và hỗ trợ chuyển dữ liệu từ Android
1.2 Tổng quan về ứng dụng iOS
1.2.1 Cấu trúc ứng dụng iOS
Ứng dụng iOS sử dụng pattern M-V-C Điều đó có nghĩa là dữ liệu và
business logic được tách ra khỏi việc trình diễn dữ liệu
Khi bắt đầu khởi động, hàm UIApplicationMain tạo ra các đối tượng cơbản quan trọng, và quan trọng nhất là đối tượng UIApplication Nhiệm vụ củađối tượng này là làm đơn giản hoá sự tương tác giữa hệ thống và các đốitượng khác trong ứng dụng Và nó được thể hiện qua hình 1.1
Trang 19Hình 1.1 Các đối tượng cơ bản của một ứng dụng iOS
Các đối tượng cơ bản bao gồm:
UIApplication: Quản lý vòng lặp sự kiện và các hành vi mức cao khác.
Thực tế ít sử dụng đối tượng này, và thường chỉ sử dụng khi muốn truy cậpđối tượng app delegate
App delegate: Là đối tượng có mặt trong mọi ứng dụng iOS và là duy
nhất (shared instance)
Documents và Data model: Đây là các custom objects, có thể tạo ra khi
khởi tạo ứng dụng hoặc tạo ra khi cần thiết
Các đối tượng ViewControllers: Quản lý việc trình diễn nội dung ứng
dụng trên màn hình Đây là các đối tượng rất quan trọng vì những màn hìnhcủa ứng dụng iOS hầu hết là các ViewController Một ViewController quản lýmột đối tượng UIView và tất cả các subviews của nó Khi được trình diễn,UIViewController hiển thị các views của nó bằng cách thêm chúng vào cửa sổcủa ứng dụng (window)
Trang 20Đối tượng UIWindow: Hầu hết các ứng dụng chỉ có một Window Tuy
nhiên cũng có những ứng dụng có nhiều Window (để tạo một số hiệu ứng)
Vòng lặp chính:
Vòng lặp chính xử lý tất cả những event mà user tạo ra Đối tượngUIApplication cài đặt vòng lặp chính tại thời gian khởi động ứng dụng và sửdụng nó để xử lý các sự kiện và cập nhật giao diện người dùng Mặc dù mộtchương trình có thể sử dụng nhiều thread nhưng vòng lặp chính luôn đượcchạy trên main thread Điều này đảm bảo việc sự kiện nào đến trước sẽ được
xử lý trước đúng theo thứ tự
Vòng lặp chính chấp nhận một số kiểu sự kiện và forward chúng tới đốitượng tiếp nhận (được gọi là responder)
1.2.2 Các trạng thái của ứng dụng iOS
Not running: Ứng dụng chưa được khởi động hoặc bị hệ thống đóng Inactive: Ứng dụng đang chạy ở foreground nhưng hiện tại không nhận
sự kiện (có thể đang thực hiện code) Đây là trạng thái quá độ, trước khichuyển sang một trạng thái khác
Active : Ứng dụng đang chạy ở foreground (ứng dụng hiện tại đang hiển
thị) và sẽ nhận các event Đây là trạng thái bình thường khi đang mở và sửdụng ứng dụng
Background : Ứng dụng ở trong background và đang thực thi mã nguồn.
Hầu hết các ứng dụng đi vào trạng thái này trong thời gian ngắn trước khi bịkết thúc Tuy nhiên, một ứng dụng đòi hỏi thêm thời gian thực thi có thể ở lâuhơn trong trạng thái này so với các ứng dụng khác (download, play music,etc) Một ứng dụng cũng có thể khởi động trực tiếp để đi vào trạng thái này
Suspended: Là trạng thái khi ứng dụng ở background nhưng không thực
thi code, chẳng hạn khi bấm vào nút Home để trở về màn hình chính của iPhone Khi ở trong trạng thái này, ứng dụng được duy trì trong bộ nhớ nhưngkhông thực thi mã nguồn Khi bộ nhớ sắp hết, một số ứng dụng trong trạng thái Suspended có thể bị đóng để nhường chỗ cho ứng dụng ở Foreground
Trang 21Mỗi khi chuyển đổi trạng thái sẽ đi kèm với một lời gọi hàm trong đối tượng App delegate Cụ thể được chỉ ra ở hình 1.2.
Hình 1.2 Vòng đời của một ứng dụng iOS
*application: willFinishLaunchingWithOptions: Method đầu tiên
được gọi khi khởi động ứng dụng
* application: didFinishLaunchingWithOptions: Cho phép thực hiện
bất cứ khởi tạo nào trước khi ứng dụng hiển thị trên màn hình
*applicationDidBecomeActive: Được gọi trước khi ứng dụng chuẩn bị
trở thành ứng dụng foreground
* applicationWillResignActive: Ứng dụng sẽ ra khỏi foreground.
*applicationDidEnterBackground: Ứng dụng đã ra khỏi foreground và
có thể kết thúc bất cứ lúc nào
*applicationWillEnterForeground:Ứng dụng sẽ ra khỏi background và
trở lại foreground nhưng vẫn chưa vào trạng thái active
* applicationWillTerminate: Được gọi khi ứng dụng bị đóng Method
này sẽ không được gọi khi ứng dụng vào trạng thái suspended
1.2.3 Vòng đời của UIViewController
Thường thì mỗi màn hình trong ứng dụng iOS là một UIViewController.Đây là đối tượng cơ bản, và các ViewController khác đều phải kế thừa nó
Trang 22Mỗi UIViewController quản lý một View và các subviews của nó Vòng đờicủa UIViewController miêu tả qua hình 1.3.
Hình 1.3 Vòng đời của một UIViewController
Có thể xem điểm bắt đầu là “Does the view exist” Từ đây một loạt cácmethod được gọi như sau:
- loadView: Thường được sử dụng trong các ứng dụng trước iOS5 Từ
iOS 5 trở đi, method này thường không được sử dụng nữa
- viewDidLoad: Được gọi một lần khi lần đầu tiên đối tượng view của
đối tượng UIViewController hiển thị
- viewWillAppear: Có thể được gọi nhiều lần tuỳ theo view đó đã tồn tại
hay chưa Method này được gọi trước khi view hiển thị trên màn hình
- viewDidAppear: Tương tự viewWillAppear, có thể được gọi nhiều lần.
Method này được gọi sau khi view đã hiển thị
- didReceivingMemoryWarning: Khi view đã hiển thị và bộ nhớ bị sử
dụng quá nhiều, nó sẽ gọi hàm này để cảnh báo Có thể dùng hàm này để xoá
dữ liệu dư thừa
Trang 23- viewWillDisappear/viewDidDisappear: Được gọi trước và sau khi
view bị remove khỏi màn hình
- viewDidUnload: Là method cuối cùng được gọi sau khi view đã biến
lý dạng danh sách mảng
Swift sử dụng các biến để lưu trữ và tham chiếu giá trị bởi một tên xácđịnh Swift sử dụng nhiều những giá trị không thay đổi được gọi là hằng số vàmạnh hơn nhiều so với hằng số trong C Hằng số được sử dụng giúp cho code
rõ ràng và an toàn hơn trong lúc làm việc với các giá trị mà không cần thayđổi
Swift cũng giới thiệu các kiểu Optional để xử lý các trường hợp không
có giá trị Optional có thể có một giá trị hoặc không có giá trị Optional antoàn và là một trong những tính năng mạnh mẽ nhất của Swift
Trang 24Cuối năm 2015, Swift đã chính thức được Apple mở mã nguồn Từ thờiđiểm này trở đi thì Swift bao gồm trình biên dịch, thư viện và debugger đãhoàn toàn trở thành mã nguồn mở.
Swift sẽ là mã nguồn mở theo bản quyền Apache 2.0, điều này có nghĩa
là các nhà phát triển phần mềm có thể sử dụng ngôn ngữ này theo cách họthích thậm chí là cho mục đích thương mại và nó hỗ trợ cho nền tảng iOS, OS
X và Linux
Apple cũng vừa cho ra website swift.org để hỗ trợ cho ngôn ngữ mãnguồn mở Swift Ở đây các developer có thể tìm thấy các nội dung, tài liệu đểthực hiện một dự án dựa trên ngôn ngữ Swift giống như Apple đang làm trênGitHub.[2]
Một đoạn mã của chương trình HelloWord viết bằng Swift được thể hiện ở hình 1.5
Hình 1.5 Đoạn mã lệnh viết bằng Swift.
1.3.1.Giới thiệu về ngôn ngữ Swift.
Đầu tiên, Swift tỏ ra linh hoạt trong điều nhỏ nhất của một ngôn ngữ lậptrình Đó là, dấu chấm phẩy Dấu chấm phẩy được đại đa số các ngôn ngữ lậptrình sử dụng để làm ký tự kết thúc một dòng lệnh Còn với Swift, dấu chấm
Trang 25phẩy vẫn với tác dụng là kết thúc một dòng lệnh đó Tuy nhiên, muốn haykhông muốn dùng dấu chấm phẩy đều được.
Biến và Hằng
Hằng là giá trị không được thay đổi sau khi nó được khai báo
Biến là giá trị có thể được thay đổi bằng một giá trị khác khi cần
Hằng và biến phải được khai báo trước khi sử dụng Phải khai báo cáchằng với từ khoá là let và biến với từ khoá là var [6]
Có thể khai báo nhiều hằng hoặc nhiều biến như sau:
Có thể cung cấp các kiểu khi khai báo biến hoặc hằng, để rõ ràng hơncho kiểu giá trị Được viết bằng dấu hai chấm và phía sau tên biến hoặc tênhằng
Ở đây có thể được đọc như sau: “khai báo biến gọi là xinchao có kiểuString” Như vậy ta chỉ có thể gán chuỗi kí tự vào cho biến xinchao
Bây giờ ta có thể gán chuỗi kí tự bất kì vào cho biến xinchao:
Tên hằng và tên biến
Tên hằng và tên biến có thể chứa hầu hết bất kỳ character(kí tự), bao gồm cả
Có thể thay đổi giá trị của biến có cùng kiểu
//Khai báo nhiều hằng hoặc nhiều biến
Trang 26Swift được thiết kế để trở thành một ngôn ngữ an toàn, nên chỉ cho sửdụng biến, hằng sau khi đã khởi gán giá trị cho biến, hằng Nếu cố sử dụngbiến, hằng khi nó chưa được khởi gán thì chương trình sẽ phát sinh lỗi Điềunày là tương tự C#, khác so với C, C++.
Giống C# và Java, Swift cung cấp đầy đủ các kiểu dữ liệu như Int32,UInt8, Int16, UInt64, Double, Float, Tuy nhiên, khi làm việc với số nguyên,nếu không quan tâm đến kích thước vùng nhớ lắm thì nên dùng kiểu dữ liệutoàn năng được Swift cung cấp là : Int, UInt Các kiểu dữ liệu này là các kiểu
dữ liệu thông minh, nó sẽ tự thay đổi kích thước theo nền tảng mà đang chạychương trình - tức là, nếu nền tảng là 32 bit thì kích thước sẽ là 32 bit, trênnền tảng 64 bit thì kích thước sẽ là 64 bit
Swift là an toàn kiểu, nên nó sẽ không cho phép gán một số nguyên chomột biến kiểu String, hoặc gán một ký tự (kiểu Character) cho một biến kiểuInt (như C, C++) Swift còn an toàn hơn nữa ở chỗ, nó loại bỏ cú pháp ép kiểungầm định
Swift hỗ trợ tạo bí danh cho các kiểu dữ liệu Điều này rất hay vì nó sẽcung cấp các tên kiểu dữ liệu mới phù hợp hơn với ngữ cảnh Ví dụ: dùng tênkiểu dữ liệu là điểm để tạo các biến chứa điểm thì sẽ dễ hiểu hơn là khai báocác biến đó với kiểu dữ liệu là UInt8
String và kiểu ký tự
Điểm khác biệt đáng quan tâm nhất về String là khả năng sửa đổi(mutability) Trong Objective C cũng như C#, các chuỗi đều là chuỗi bất di
Trang 27bất dịch (immutable), có nghĩa là sau khi gán một chuỗi cho biến thì chúng takhông thể chèn thêm ký tự, xoá ký tự, thay đổi ký tự trong chuỗi đó Nếumuốn làm những việc như vậy, phải dùng kiểu NSMutableString (củaObjective C) hay kiểu StringBuilder (của C#) Điều này đôi lúc gây ra sự bấttiện và làm gia tăng việc xử lý chuỗi Còn với Swift, việc mutable hayimmutalbe được quyết định thông qua gán chuỗi cho biến hay hằng Nếu gánchuỗi cho hằng thì chuỗi đó là immutable và gán cho biến thì có thể sửa đổichuỗi đó tuỳ thích Một cách xử lý khá là giản dị.
Như ở phần trên đã đề cập tới, String của Swift là kiểu giá trị và khi thựchiện gán hoặc truyền tham số thì chuỗi sẽ được sao chép Cách xử lý này gầnvới tự nhiên hơn, nên người lập trình sẽ dễ dàng hơn để sử dụng Tuy nhiên,
có người sẽ bảo rằng như vậy thì sẽ tốn hiệu năng xử lý hơn rất nhiều (vì saochép luôn cả chuỗi như vậy vừa tốn bộ nhớ, vừa tốn hiệu năng xử lý sao chépchuỗi) Swift đã xử lý vấn đề này ngầm bên dưới bằng cách : đầu tiên, vẫn chỉgán địa chỉ (không sao chép nguyên chuỗi ra vùng nhớ khác), chỉ cho đến khigặp dòng lệnh thực hiện sửa đổi nội dung của chuỗi thì chuỗi đó mới đượcsao chép ra vùng nhớ mới và các thao tác sửa đổi được thực hiện trên vùngnhớ này
Có thể dùng phép toàn + để nối chuỗi, ký tự; phép toán so sánh ==, != để
so sánh hai chuỗi, hai ký tự; phép toán += để bổ sung chuỗi, ký tự vào cuối
Kiểu dữ liệu Tuple
Kiểu tuple là một trong hai kiểu dữ liệu mới của Swift
Kiểu tuple nhóm nhiều giá trị vào bên trong một giá trị kết hợp duy nhất.Các giá trị trong tuple có thể thuộc bất kỳ kiểu dữ liệu nào và không cần phảigiống nhau
Kiểu dữ liệu Optional
Đây là kiểu dữ liệu mới thứ hai của Swift
Ta dùng optional khi một biến (tại thời điểm nào đó trong chu trình sốngcủa nó) có thể không chứa giá trị nào Khi lấy giá trị của một biến optional thì
Trang 28có thể nhận được câu trả lời kiểu như : Có chứa giá trị và nó là x hoặc hoàntoàn không chứa giá trị nào.
Optional gần giống như con trỏ nil (hoặc null của C#) Tuy nhiên, nil haynull chỉ dùng với kiểu dữ liệu lớp, còn optional thì dùng với mọi kiểu dữ liệu
Có nghĩa là ngay cả một biến kiểu Int cũng có thể có lúc không nhận được giátrị nào Swift cũng dùng từ khoá nil, nhưng nó không phải là con trỏ (trong C
nó là con trỏ trỏ về vùng đầu tiên của bộ nhớ heap), nó chỉ là từ khoá để chỉtình trạng không chứa giá trị
Để khai báo một kiểu optional, ta thêm dấu chấm hỏi vào cuối tên kiểu dữliệu
Toán tử
Phép gán = không trả ra giá trị, nên không gán giá trị cho nhiều biếnđồng thời như trong C# được Việc ngăn không cho phép gán trả ra giá trịcũng giúp các biểu thức điều kiện đỡ phức tạp, đỡ sai sót hơn Toán tử % cóthể dùng cho cả số thực và số âm
Các phép toán số học (+, -, *, /) mặc định không xử lý trường hợp tràn
số Nếu tràn số thì chương trình sẽ phát sinh lỗi Để xử lý trường hợp tràn số,Swift hỗ trợ 5 toán tử xử lý tình huống tràn số là &+, &-, &*, &/, &%
1.3.2 Array và Dictionary (Mảng và Từ điển)
Giống như Objective C, Swift vẫn chỉ cung cấp hai kiểu collection làArray và Dictionary
Array (còn gọi là mảng) lưu trữ một danh sách có thứ tự các giá trị cócùng kiểu Các giá trị giống nhau có thể xuất hiện nhiều lần tại những vị tríkhác nhau
Dictionary lưu trữ một tập không thứ tự các giá trị cùng kiểu mà nó cóthể được tham chiếu và tìm kiếm thông qua một định danh duy nhất (hay còngọi là khoá) Dictionary chính là kiểu tập hợp Map hoặc Hashtable trong C#
và các ngôn ngữ khác
Trang 29Ta dùng dictionary khi cần tìm kiếm các giá trị dựa trên định danh (khoá)của chúng, giống như cách tìm kiếm định nghĩa của các từ trong một quyển từđiển.
Objective C chỉ cung cấp đúng hai kiểu collection này Các kiểucollection như List, Stack, Queue là không có Nhưng trong XCode, người tadùng hai kiểu này khá linh hoạt để thay thế cho những kiểu thiếu trên Cótrường hợp khá thú vị và hay là người ta dùng Dictionary để tổ chức dữ liệucho các TableView Mỗi hàng là một thành phần trong Dictionary được phânbiệt với nhau thông qua key là id của hàng dữ liệu Việc tổ chức bằngDictionary như trên mạnh mẽ và linh hoạt hơn tổ chức bằng Array rất nhiều.Tương tự như kiểu string thì array và dictionary là có thể sửa đổi(mutable) khi được chứa trong biến và không thể sửa đổi (immutable) khiđược chứa trong hằng Điều này giải phóng người lập trình ra khỏi cái mớbòng bong giữa NSArray và NSMutableArray hay NSDictionary vàNSMutableDictionary của Objective C
Các thao tác thêm, sửa, xoá của Swift khá là tự nhiên Có thể dùng phéptoán += để thêm một hoặc vài thành phần mới vào array hoặc dictionary Cóthể dùng toán tử phạm vi để sửa đổi cùng lúc cả nhóm các thành phần liền kềnhau
1.3.3 Cấu trúc điều khiển
Swift cung cấp đầy đủ các câu lệnh điều khiển if, switch, for, while, do.Các biểu thức điều kiện không cần đặt trong cặp dấu ngoặc, nhưng cặp dấungoặc nhọn để bao phần thân là bắt buộc
Các biểu thức điều kiện phải có kết quả kiểu bool Điều này là an toàn hơn,giống với C#, Java, nhưng khác so với C Câu lệnh switch là câu lệnh cónhiều cải tiến nhất trong các câu lệnh điều khiển Câu lệnh for-in là câu lệnhmới được bổ sung trong nhóm các câu lệnh lặp Câu lệnh này giống câu lệnhforeach của C#, nhưng mạnh mẽ hơn
Trang 30Swift vẫn hỗ trợ hai câu lệnh break và continue Ngoài ra, còn hỗ trợ thêmcâu lệnh fallthrough (trong câu lệnh switch) để cho phép thực thi xuống tiếpcase tiếp theo, giống như cách làm việc của switch của các ngôn ngữ C, C++,C#.
Swift hỗ trợ một thứ gọi là labelled statement Cái này nó giống như nhãn
và lệnh goto trong C, C++ Tuy nhiên, labelled statement được dùng trong cáctrường hợp như : khi có nhiều vòng lặp lồng nhau, hoặc khi có các câu lệnhlặp lồng trong câu lệnh switch, Trong các trường hợp này, việc câu lệnhbreak, continue có thể xác định được thoát ra khỏi vòng lặp, câu lệnh switchnào thì sẽ hữu dụng hơn Như vậy cách dùng labelled statement an toàn hơn
so với lệnh goto của C, C++ rất nhiều
1.3.4 Hàm
Hàm(function) là khối mã khép kín dùng để thực hiện một tác vụ cụ thể.Cho một tên hàm để xác định những gì nó làm, và tên này được sử dụng để
“gọi” hàm để thực hiện tác vụ khi cần thiết
Cú pháp hàm thống nhất của Swift là đủ linh hoạt để thể hiện bất cứ điều
gì từ một hàm C-style đơn giản không có tên tham số đến một phương thứcObjective-C-style phức tạp với các tên tham số hàm địa phương và bên ngoàicho mỗi tham số Các thông số có thể cung cấp các giá trị để mặc định để đơngiản hóa các cuộc gọi chức năng và có thể được thông qua như tham số in-out, mà sửa đổi một biến được khi hàm đã hoàn tất việc thực hiện
Mỗi hàm trong Swift đều có một kiểu, bao gồm các kiểu tham số và kiểutrả về của hàm Có thể sử dụng kiểu này giống như bất kỳ kiểu nào khác trongSwift, việc này dễ dàng để truyền vào hàm cũng như tham số cho các hàmkhác, và để trả về hàm này từ hàm khác Hàm này cũng có thể được viết trongcác hàm khác để đóng gói các hàm hữu ích trong phạm vi hàm lồng nhau
Trang 311.3.5 Closure (Kết thúc)
Closures là những khối độc lập chứa các chức năng có thể được truyềnqua và sử dụng trong mã code của Closures trong Swift tương tự như blockstrong C và Object-C, và như lambas trong một số ngôn ngữ lập trình khác.Closures có thể thu nạp và lưu trữ giá trị tham chiếu đến bất kỳ hằng số
và biến nào đó từ những bố cảnh mà chúng được định nghĩa Điều này đượcgọi là đóng trên những hằng số và biến, do đó tên “closures” Swift xử lý tất
cả công việc quản lý bộ nhớ của việc thu nạp
Hàm toàn cục và hàm lồng nhau, như đã giới thiệu trong Function, thực
sự là trường hợp đặc biệt của closures Closures lấy một trong ba hình thức:
- Hàm toàn cục là closures có một tên và không nắm bắt được bất kỳ giátrị nào cả
- Hàm lồng nhau là closures có một tên và có thể nắm bắt các giá trị từhàm kèm theo của chúng
- Biểu thức closure là closures không rõ tên được viết theo cú pháp nhẹ
mà có thể nắm bắt các giá trị từ bối cảnh xung quanh
Biểu thức closure của Swift có một phong cách trôi chảy và rõ ràng, vớiviệc tối ưu hóa để khuyến khích ngắn gọn, cú pháp lộn xộn-miễn phí trongcác kịch bản phổ biến Những tối ưu hóa bao gồm:
- Suy luận các tham số và giá trị trả về các loại từ bối cảnh
- Implicit returns from single-expression closures
- Khai báo tên đối số ngắn gọn
- Trailing cú pháp closure
Closure Expressions
Hàm lồng nhau, như đã giới thiệu ở Nested Functions, là thuận tiện trongviệc đặt tên và định nghĩa các khối độc lập của mã nguồn như là một phần củamột hàm lớn hơn Tuy nhiên, đôi khi nó là hữu ích để viết các phiên bản ngắnhơn của cấu trúc giống như hàm không có khai báo và tên đầy đủ Điều nàyđặc biệt đúng khi làm việc với các hàm mà phải đặt vào các hàm khác nhưmột hoặc nhiều đối số của chúng
Biểu thức Closure – Closure expressions – là một cách để viết ngắn gọntrực tiếp, tập trung vào cú pháp Biểu thức Closure cung cấp một vài tối ưu
Trang 32hóa cú pháp cho việc viết closures dưới dạng rút gọn mà không mất sự rõ rànghay mục đích Các ví dụ biểu closure dưới đây minh hoạ những tối ưu hóabằng cách chỉnh lại một ví dụ duy nhất của hàm được sắp xếp trên một số lầnlặp, ví dụ thể hiện chức năng tương tự trong một cách gọn gàng hơn.
Closure Expression Syntax
Cú pháp biểu thức closure có thể sử dụng các tham số hằng, các tham sốbiến, và tham số inout Các giá trị mặc định không được cung cấp Các tham
số lệnh biến thiên có thể không được sử dụng nếu đặt tên tham số lệnh biếnthiên và đặt nó ở cuối cùng trong danh sách tham số Tuples có thể được sửdụng như là các kiểu tham số và các kiểu trả về
1.3.6 Enumeration ( Liệt kê)
Một liệt kê – enumeration – định nghĩa một kiểu phổ biến cho một nhómcác giá trị liên quan và cho phép làm việc với các giá trị trong một cách antoàn kiểu trong mã code của
Nếu đã quen thuộc với C, sẽ biết rằng C enumerations gán những tên cóliên quan cho một tập hợp các giá trị số nguyên Liệt kê trong Swift linh hoạthơn nhiều, và không cần phải cung cấp một giá trị cho từng phần tử thuộc liệt
kê Nếu một giá trị (được biết đến như một giá trị “thô” – “raw”) được cungcấp cho mỗi phần tử, giá trị có thể là một chuỗi, một ký tự hoặc một giá trịcủa bất kỳ kiểu số nguyên hoặc kiểu số phẩy động
Ngoài ra, các phần tử liệt kê có thể chỉ định các giá trị liên quan của bất
kỳ kiểu nào để được lưu giữ cùng với mỗi giá trị phần tử khác, giống như hợpthức hoặc biến thức trong các ngôn ngữ khác Có thể định nghĩa một tập hợpchung của các phần tử liên quan như là một phần của một enumeration, mỗiphần tử trong số đó có một bộ các giá trị khác nhau của các kiểu thích hợpliên kết với nó
Liệt kê trong Swift là lớp đầu tiên theo đúng nghĩa của nó Chúng ápdụng nhiều tính năng truyền thống được hỗ trợ chỉ bởi các lớp, chẳng hạn nhưcác thuộc tính tính toán để cung cấp thêm thông tin về giá trị hiện tại của liệt
Trang 33kê – enumeration, và phương thức thể hiện – instance - để cung cấp các chứcnăng liên quan đến các giá trị liệt kê biểu diễn Enumerations cũng có thể địnhnghĩa trình khởi tạo để cung cấp một giá trị phần tử ban đầu; có thể được mởrộng để mở rộng chức năng của chúng vượt ra ngoài thực hiện ban đầu củachúng; và có thể phù hợp với các giao thức để cung cấp chức năng tiêu chuẩnchức năng.
1.3.7 Classes and Structure (Lớp và cấu trúc)
Lớp và cấu trúc được tạo ra với cùng mục đích chung, những cấu trúclinh hoạt đó trở thành các khối xây dựng của mã chương trình Ta định nghĩacác thuộc tính và phương thức để thêm chức năng cho các lớp và cấu trúcbằng cách sử dụng chính xác cú pháp tương tự như đối với các hằng, biến, vàcác hàm
Không giống như các ngôn ngữ lập trình khác, Swift không yêu cầu phảitạo ra giao diện độc lập và các tập tin thực hiện cho các lớp và cấu trúc tùychỉnh Trong Swift, ta định nghĩa một lớp hoặc một cấu trúc trong một tập tinduy nhất, và các giao diện mở rộng để lớp hoặc cấu trúc đó tự động làm sẵncho các mã code khác để sử dụng
So sánh lớp và cấu trúc:
Lớp và cấu trúc trong Swift có nhiều điểm chung Cả hai có thể:
- Định nghĩa các thuộc tính(Property) để lưu trữ các giá trị
- Định nghĩa các phương thức(Method) để cung cấp chức năng
- Định nghĩa subscripts để cung cấp quyền truy cập vào các gía trị củachúng sử dụng cú pháp subscript
- Định nghĩa bộ khởi tạo để thiết lập trạng thái ban đầu của chúng
- Để mở rộng triển khai chức năng của chúng ra bên ngoài thực thi mặc định
- Phù hợp với các giao thức để cung cấp những chuẩn chức năng của mộtkiểu nhất định Lớp – class – có khả năng mở rộng, cấu trúc -structure – thìkhông:
- Tính kế thừa cho phép một lớp thừa hưởng các đặc tính của lớp khác
- Type casting cho phép ta kiểm tra và giải thích kiểu của một thể hiệnlớp trong thời gian chạy
Trang 34- Deinitializers cho phép thể hiện của một lớp giải phóng bất kỳ mãnguồn nào đó mà nó được gán.
Class and Structure Instances
Lấy các giá trị trong lớp và cấu trúc
Thay đổi giá trị trong lớp và cấu trúc:
1.3.8 Subscript
Lớp (class) , cấu trúc (structure) , và kiểu liệt kê (enumaration) có thể
định nghĩa subscript, đó là các phím tắt để truy cập vào các phần tử của một
tập hợp, danh sách, hoặc chuỗi Sử dụng subscripts để thiết lập và lấy giá trị
của index mà không cần phương thức riêng biệt cho thiết lập và phục hồi.
Subscript Syntax
Subscripts cho phép truy vấn các thể hiện của một kiểu bằng cách viếtmột hoặc nhiều giá trị trong dấu ngoặc vuông sau tên thể hiện Cú pháp củachúng tương tự cho cả cú pháp phương thức thể hiện và cú pháp thuộc tínhtính toán Viết định nghĩa subscript với từ khóa subscript, và chỉ định mộthoặc nhiều tham số đầu vào và một kiểu trả về, trong cùng một cách như cácphương thức thể hiện Không giống như các phương thức thể hiện, kí hiệu cóthể được đọc-ghi hay chỉ-đọc Hành vi này được truyền đạt bởi một getter vàsetter trong cùng một cách như đối với thuộc tính tính toán
//Lấy giá trị trong Class và Struct
print("Lấy giá trị b: \(BStruct.b)")
print("Lấy giá trị a: \(BClass.a)")
//Kết quả: "Lấy giá trị b: 3"
//Kết quả: "Lấy giá trị a: 0.3"
//Thay đổi giá trị
Trang 351.3.9 Inheritance(Kế Thừa)
Một Class có thể kế thừa (inherit) method, property, và các đặc tính khác
từ các Class khác Khi một Class kế thừa từ một lớp khác, Class kế thừa đượcgọi là một Class con (subclass), và Class được nó kế thừa gọi là Class cha(superclass) của nó Kế thừa là một hành vi cơ bản để phân biệt các lớp từ cáckiểu khác nhau trong Swift
Class trong Swift có thể gọi và truy cập các method, property, vàsubscript thuộc class cha của chúng và có thể cung cấp các phiên bản ghi đècủa bản thân chúng với những method, property, và subsript để tinh chỉnh haythay đổi hành vi của chúng Swift giúp đảm bảo việc ghi đè là chính xác bằngcách kiểm tra các định nghĩa ghi đè có một định nghĩa phù hợp với class cha.Class cũng có thể thêm các quan sát thuộc tính với các thuộc tính kế thừa
để được thông báo khi giá trị của một thuộc tính thay đổi Quan sát thuộc tính
có thể được thêm vào bất kỳ thuộc tính nào, cho dù ban đầu nó được địnhnghĩa như là một thuộc tính lưu trữ hoặc thuộc tính tính toán
1.3.10 Subclass(lớp con)
Lớp con (Subclassing) là hành động của một lớp mới dựa trên một lớp hiện
có Các lớp con thừa hưởng những đặc tính từ lớp hiện có, sau đó có thể tinh chỉnh, có thể thêm các đặc tính mới cho các lớp con
Để chỉ ra rằng một lớp con có một lớp cha, viết tên lớp con trước tên lớp cha, cách nhau bằng dấu hai chấm:
let getClass = CClass()
print("\(getClass.tinh())")
//Kết quả: "15"
Trang 361.3.11 Mothod and Property (phương thức và thuộc tính)
Property là thuộc tính của một đối tượng
Method là những chức năng liên quan tới đối tượng đó
1.3.12 Handling Error (đối phó với lỗi)
Là quá trình xử lý lỗi và khắc phục từ các lỗi trong chương trình Swift đã cung cấp first-class hỗ trợ việc ta xuất lỗi, bắt lỗi, tuyên truyền và khắc phục lỗi khi chạy
Throwing Errors
Chỉ ra functionn hoặc method có thể ném ra lỗi
Catching and Handling Errors
Kết luận chương: chương 2 đề cập tới sự phát triển,cấu trúc và trạng thái của
hệ điều hành IOS, như nào là ngôn ngữ lập trình Swift
class Nguoi {
var ten:String = ""
var tuoi:Int = 0 }
class Nguoi {
var ten:String = ""
var tuoi:Int = 0
func di(){ }
func an(){ }
func ngu(){ } }
func mahoaPassword(str:String, password:String) throws ->String{
guard password.characters.count > 0 else{throw loiMaHoa.Empty}
guard password.characters.count >= 6 else{throw loiMaHoa.Short}
return String(mahoa.characters.sort()) }
do{
let chuoimahoa = try mahoaPassword("Lam", password: "123456")
print("Bo Trong") }catch{
print("Loi Phat Sinh") }
Trang 37CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ ỨNG DỤNG TÌM ĐƯỜNG ĐI
2.1 Mô tả bài toán
Bài toán toán tìm đường đi thông qua smartphone luôn là bài toán cầnthiết cho nhiều người Mỗi khi bạn ra đường, hay đến một thành phố xa lạ,việc tìm được đường đi là khá khó khăn Ứng dụng tìm đường đi cho phépcác bạn tìm được địa điểm mà mình muốn đến thông qua ứng dụng trênsmartphone, không những thế bài toán còn tối ưu hóa, chỉ ra những đường đingắn nhất đến đích cho bạn thông qua các chỉ số như số kilomet, thời gian dichuyển…Ngoài ra ứng dụng còn hướng dẫn người dùng cách di chuyển,hướng đi một cách dễ dàng và thuận thiện nhất
2.3 Yêu cầu chức năng
- Chức năng của một ứng dụng chỉ đường cũng giống như bản đồ vậychức năng đầu tiên mà ứng dụng chỉ đường cần có là hiển thị bản đồ
- Chức năng định vị thiết bị
- Chức năng định vị các địa điểm cần tìm
- Chức năng tìm kiếm đường đi ngắn nhất
- Chức năng chỉ đường cũng như hiển thị thời gian để đi quãng đường đó
Trang 382.4 Yêu cầu phi chức năng
Tính đúng đắn: Ứng dụng đảm bảo chính xác các chức năng đặc tả vàthỏa mãn các mục đích yêu cầu của trung tâm
Tính khoa học: tính khoa học của ứng dụng thể hiện qua các mặt: khoahọc về giao diện, khoa học về nội dung và hình thức thao tác
Tính tin cậy: Ứng dụng được trông chờ thực hiện các chức năng dự kiếnvới độ chính xác được yêu cầu
Tính kiểm thử được: Ứng có thể dễ dàng để có thể kiểm tra được Đảmbảo rằng nó thực hiện đúng các chức năng dự định
Tính sáng tạo: Sản phẩm được thiết kế và cài đặt đầu tiên, được phục vụcho những đặc thù riêng
Tính toàn vẹn: Không gây ra những nhập nhằng trong thao tác, đảm bảotính nhất quán về cú pháp
Tính độc lập: Độc lập với thiết bị, độc lập với cấu trúc của đối tượng.Tính dễ phát triển, hoàn thiện: Có thể mở rộng cho các phương án kháchoặc mở rộng tăng cường về mặt chức năng một cách dễ dàng
2.5 Liệt kê tác nhân và ca làm việc của ứng dụng.
- Tác nhân: người dùng
Người dùng là tác nhân chính trực tiếp có các tác động lên ứng dụng
- Ca làm việc của ứng dụng:
+ Truy cập ứng dụng
+ Nhập thông tin địa điểm
+ Định vị các địa điểm tham chiếu
+ Tìm kiếm chỉ đường
2.5.1 Đặc tả các ca làm việc
Ca làm việc truy cập ứng dụng được đặc tả ở bảng 2.1
Bảng 2.1 Đặc tả ca làm việc truy cập ứng dụng Truy cập ứng dụng
bị di động
Đầu vào
Trang 39Điều kiện Có kết nối internet và bật định vị
của thiết bị
Ca làm việc nhập thông tin địa điểm được đặc tả ở bảng 2.2
Bảng 2.2 Đặc tả ca làm việc nhập thông tin địa điểm
Nhập thông tin địa điểm
- Vị trí hiện tại
- Các địa điểm muốn tìm kiếm
thiết bị và tìm kiếm 1 số gợi ý
Ca làm việc định vị các địa điểm tham chiếu được đặc tả ở bảng 2.3
Bảng 2.3 Đặc tả ca làm việc định vị các địa điểm tham chiếu
Định vị các địa điểm tham chiếu
điểm
vừa nhập
vừa nhập
Ca làm việc tìm kiếm chỉ đường được đặc tả ở bảng 2.4
Bảng 2.4 Đặc tả ca làm việc tìm kiếm chỉ đường Tìm kiếm chỉ đường
tin địa điểm
Trang 40Đầu ra Đưa ra các kết quả chỉ đường cho người dùng
2.5.2 Biểu đồ Use case đặc tả ca làm việc của ứng dụng
Biểu đồ Usecase chỉ rõ các ca làm việc của người dùng tác động lên ứng dụng
và nó được sắp xếp theo thứ tự từ trên xuống dưới Đầu tiên, người dùng muốn sử dụng ứng dụng thì phải truy cập ứng dụng, sau đó nhập thông tin điểm đầu cuối mà mình muốn đến Sau đó người dùng sẽ định vị được các địađiểm tham chiếu mà mình cần tìm và sẽ thu được kết quả tìm kiếm đường đi
Ca làm việc này được mô tả ở hình 2.1
người dùng
truy cập ứng dụng
Nhập thông tin địa điểm
định vị các địa điểm tham chiếu
tìm kiếm chỉ đường
Hình 2.1 Biểu đồ Use case đặc tả ca làm việc của ứng dụng
2.6 Sơ đồ Use case các chức năng của ứng dụng
2.6.1 Sơ đồ Use case chức năng hiển thị bản đồ
Chức năng hiển thị bản đồ cho phép khi người dùng truy cập ứng dụng, sẽ có một bản đồ online hiện ra cho phép chúng ta tìm kiếm địa điểm mà không có gợi ý Chức năng hiển thị bản đồ được mô tả ở hình 2.2