1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

92 389 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 92
Dung lượng 2,86 MB

Nội dung

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 1

Em 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 2

Trê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 3

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 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 4

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

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 5

3.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 6

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

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 7

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

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 8

Hì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 9

3.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 10

Hì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 11

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

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 12

MỞ ĐẦ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 13

nê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 14

CHƯƠ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 15

1.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 16

iOS 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 17

iOS 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 19

Hì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 21

Mỗ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 22

Mỗ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 24

Cuố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 25

phẩ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 26

Swift đượ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 27

bấ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 28

có 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 29

Ta 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 30

Swift 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 31

1.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 32

hó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 33

kê – 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 35

1.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 36

1.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 37

CHƯƠ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 38

2.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

Ngày đăng: 25/07/2017, 13:54

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w