Professional Documents
Culture Documents
Swift - Bai 3 - OOP
Swift - Bai 3 - OOP
Class Structure
• Có thể kế thừa từ class khác • Không có tính chất kế thừa
• Có thể ép kiểu (type casting) để kiểm • Không thể ép kiểu
tra và chuyển đổi kiểu của instance tại • Kiểu tham trị
runtime
•…
• Kiểu tham chiếu
•…
• Giá trị của kiểu dữ liệu tham trị được
• Giá trị của kiểu dữ liệu tham chiếu được copy khi nó được gán cho một biến /
tham chiếu tới cùng một instance khi nó hằng số, hoặc khi nó được truyền qua
được gán cho một biến / hằng số, hoặc một function
khi nó được truyền qua một function
Enumeration
• Khai báo một nhóm các giá trị liên quan với nhau, nhằm tạo sự tường minh trong
lập trình cũng như tính toán và xử lý.
• Là kiểu tham trị, không có tính thừa kế.
• Cú pháp:
• Khai báo enumeration bằng từ khoá enum
• Mỗi case trong enumeration được khai báo bằng từ khoá case
Enumeration có
method và properties…
// Kết quả: “Hearts” cách sử dụng tương tự
như ở class và structure
Enumeration
• Enumeration case có thể chứa giá trị liên kết (associtated values) => Chứa thêm
thông tin của enum case.
• Những giá trị này có thể thuộc bất kỳ kiểu dữ liệu nào, và khác nhau trong mỗi
enum case nếu cần thiết.
Enumeration
• Raw value là giá trị mặc định được đưa ra của enumeration case, có cùng kiểu dữ
liệu với enumeration.
• Đối với kiểu string hoặc integer, Swift tự động gán giá trị raw value cho enum case
nếu case đó không được gán giá trị mặc định.
Stored properties
change 'let' to 'var' to make it mutable
Hàm getter
Sử dụng từ khoá get
Hàm setter
Sử dụng từ khoá set
Gọi thông qua instance của kiểu dữ liệu. Gọi thông qua kiểu dữ liệu.
Instance method
• Thuộc tính self: Mọi instance của một kiểu dữ liệu đều sở hữu thuộc tính được
đặt tên là seft, mà giá trị của nó tương đương với chính instance đó.
• Sử dụng thuộc tính self trong instance method mục đích để trỏ tới chính
instance hiện tại đang làm việc.
• Nhằm tạo ra sự tường mình khi các biến local của các hàm trùng với tên của các
property.
• Ví dụ:
Instance method
• Thuộc tính của kiểu tham trị (như structure hoặc enumeration) mặc định không
được thay đổi từ bên trong của instance method
• Muốn thay đổi thì instance method đó phải được khai báo bằng từ khoá
mutating
• Ví dụ:
Type method
• Khai báo bằng từ khoá static hoặc class trước từ khoá func.
• static func: Không cho phép các lớp con override lại func
• class func: Cho phép lớp con override lại func
• Ví dụ:
Inheritance
Polymorphism
Prevent overriding
• Để tránh việc lớp con override các tính chất của lớp cha, sử dụng từ khoá final
• Ví dụ:
final var someVariance = 0
final func someFunction() { … }
• Sử dụng từ khoá final trước khai báo class => Class không thể được thừa kế
• Ví dụ:
• Class và structure phải set tất cả các giá trị mặc định thích hợp cho các thuộc tính trước khi
instance của class hay structure được khởi tạo.
• Đối với những thuộc tính có kiểu optional, có thể không khởi tạo giá trị cho nó.
• Đối với những class hoặc structure mà đã cung cấp giá trị ban đầu cho tất cả các thuộc tính và
không có hàm khởi tạo, Swift sẽ cung cấp hàm init() mặc định cho những class và structure trên.
• Hàm khởi tạo với từ khoá init set giá trị mặc định
thích hợp cho các thuộc tính.
• Vì class Person là lớp cơ sở, cho nên không xuất
hiện từ khoá super trong hàm khởi tạo.
Initialization
• Ví dụ:
• Ngoài ra
• Có thể viết nhiều hàm khởi tạo của một class khác nhau về tham số truyền vào
Class Inheritance and Initialization
• Trong class có hai loại initializer:
• Designated initializers: • Convenience initializers:
• Hàm khởi tạo cơ sở của class. • Hàm khởi tạo phụ trợ của class.
• Khởi tạo đầy đủ các thuộc tính của • Gọi hàm designated initializer trong
class. cùng class.
• Gọi hàm khởi tạo thích hợp của lớp • Thường được dùng để khởi tạo
cha để tiếp tục chuỗi khởi tạo instance đối với một use case phổ
• Mỗi class có ít nhất một designated biến hoặc với giá trị đầu vào đặc
initializer biệt…
• Không bắt buộc phải có convenience
initializer trong class
Class Inheritance and Initialization
• Tham khảo:
• https://useyourloaf.com/blog/swift-3-access-controls/
Tài liệu tham khảo
• The Swift Programming Language (Swift 4)