Site logo
Authors
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
Published on
Published on

Tìm Hiểu Class Trong Swift

Tìm Hiểu Class Trong Swift

Class là gì?

Class trong Swift là một bản thiết kế (blueprint) để tạo ra các đối tượng (objects). Mỗi đối tượng được tạo ra từ một class sẽ có các thuộc tính (properties) và hành vi (methods) giống nhau. Class cho phép bạn tạo các đối tượng (objects) và cung cấp các tính năng quan trọng như kế thừa, khởi tạo, và quản lý dữ liệu thông qua các thuộc tính (properties) và phương thức (methods). Trong Swift, Class (Lớp) là một trong những nền tảng cốt lõi của lập trình hướng đối tượng (OOP).

Tại sao sử dụng Class?

  • Tổ chức code: Class giúp bạn tổ chức code một cách logic, dễ hiểu và dễ bảo trì.
  • Kế thừa: Class cho phép bạn tạo ra các class con kế thừa từ class cha, giúp tái sử dụng code và tạo ra các hệ thống phân cấp.
  • Đa hình: Các đối tượng của các class khác nhau có thể được sử dụng thông qua một giao diện chung (protocol), cho phép bạn viết code linh hoạt hơn.

Khai Báo Class

  1. Khai Báo Class Bạn khai báo Class bằng từ khóa class và có thể thêm các thuộc tính, phương thức bên trong để định nghĩa hành vi và trạng thái của đối tượng.
class Person {
    var name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    func introduce() {
        print("Hello, my name is \(name) and I am \(age) years old.")
    }
}

Khởi tạo đối tượng:

// Khởi tạo đối tượng
let person = Person(name: "Alice", age: 25)
person.introduce()
// Kết quả: "Hello, my name is Alice and I am 25 years old."

Các khái niệm quan trọng trong Class

  • Thuộc tính (Properties): Đặc trưng của một đối tượng.
  • Phương thức (Methods): Hành động mà một đối tượng có thể thực hiện.
  • Initializer: Phương thức đặc biệt được gọi khi tạo một đối tượng mới.
  • Deinitializer: Phương thức được gọi ngay trước khi một đối tượng bị hủy.
  • Kế thừa: Quá trình một class kế thừa các thuộc tính và phương thức từ một class khác.
  • Đa hình: Khả năng của các đối tượng thuộc các class khác nhau thực hiện cùng một hành động theo những cách khác nhau.

Các Thành Phần Trong Class

Thuộc tính (Properties)

2.1. Thuộc tính (Properties) Thuộc tính lưu trữ dữ liệu liên quan đến đối tượng.

class Car {
    var brand: String
    var speed: Int
    
    init(brand: String, speed: Int) {
        self.brand = brand
        self.speed = speed
    }
}

Phương thức (Methods)

2.2. Phương thức (Methods) Phương thức là các hành động hoặc chức năng liên quan đến đối tượng.

class Car {
    var brand: String
    var speed: Int
    
    init(brand: String, speed: Int) {
        self.brand = brand
        self.speed = speed
    }
    
    func drive() {
        print("\(brand) is driving at \(speed) km/h.")
    }
}

Thuộc tính tính toán (Computed Properties)

2.3. Thuộc tính tính toán (Computed Properties) Giống như trong Struct, bạn có thể sử dụng thuộc tính tính toán trong Class.

class Rectangle {
    var width: Double
    var height: Double
    
    var area: Double {
        return width * height
    }
    
    init(width: Double, height: Double) {
        self.width = width
        self.height = height
    }
}

let rect = Rectangle(width: 10.0, height: 5.0)
print(rect.area)  // Kết quả: 50.0

Sự Khác Biệt Giữa Class Và Struct

  1. Sự Khác Biệt Giữa Class Và Struct
Đặc điểm Class Struct
Kiểu dữ liệu Tham chiếu (Reference Type) Giá trị (Value Type)
Truyền dữ liệu Gán một Class sẽ chia sẻ cùng vùng nhớ Gán Struct tạo một bản sao mới
Hỗ trợ kế thừa Không
Khả năng mutating Không cần mutating khi thay đổi thuộc tính Cần mutating cho phương thức thay đổi

Ví dụ minh họa kiểu tham chiếu của Class:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

let person1 = Person(name: "John")
let person2 = person1
person2.name = "Alice"

print(person1.name)  // Kết quả: "Alice"

Kế Thừa (Inheritance)

  1. Kế Thừa (Inheritance) Class hỗ trợ kế thừa, cho phép bạn mở rộng chức năng từ Class khác.
class Animal {
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func sound() {
        print("\(name) makes a sound.")
    }
}

class Dog: Animal {
    override func sound() {
        print("\(name) barks.")
    }
}

let dog = Dog(name: "Buddy")
dog.sound()
// Kết quả: "Buddy barks."

<!-- var breed: String -->

Deinitialization (Hàm hủy)

  1. Deinitialization (Hàm hủy) Class có thể định nghĩa một hàm hủy deinit để giải phóng tài nguyên khi đối tượng bị xóa.
class FileHandler {
    init() {
        print("File opened.")
    }
    
    deinit {
        print("File closed.")
    }
}

var handler: FileHandler? = FileHandler()
// Kết quả: "File opened."
handler = nil
// Kết quả: "File closed."

Tính Đa Hình (Polymorphism)

  1. Tính Đa Hình (Polymorphism) Class hỗ trợ tính đa hình thông qua kế thừa và ghi đè phương thức.
class Shape {
    func draw() {
        print("Drawing a shape.")
    }
}

class Circle: Shape {
    override func draw() {
        print("Drawing a circle.")
    }
}

class Square: Shape {
    override func draw() {
        print("Drawing a square.")
    }
}

let shapes: [Shape] = [Circle(), Square()]
for shape in shapes {
    shape.draw()
}
// Kết quả:
// "Drawing a circle."
// "Drawing a square."

Tính Đóng Gói (Encapsulation)

  1. Tính Đóng Gói (Encapsulation) Bạn có thể sử dụng các cấp độ truy cập (private, public, internal, fileprivate) để giới hạn quyền truy cập vào thuộc tính hoặc phương thức của Class.
class BankAccount {
    private var balance: Double = 0.0
    
    func deposit(amount: Double) {
        balance += amount
    }
    
    func getBalance() -> Double {
        return balance
    }
}

let account = BankAccount()
account.deposit(amount: 1000)
print(account.getBalance())  // Kết quả: 1000

Từ Khóa final

  1. Từ Khóa final Bạn có thể sử dụng từ khóa final để ngăn một Class bị kế thừa hoặc phương thức bị ghi đè.
final class Animal {
    var name: String
    init(name: String) {
        self.name = name
    }
}

Khi nào nên sử dụng Class?

  1. Khi nào nên sử dụng Class? Class được sử dụng trong các trường hợp:
  • Khi bạn cần mô tả các đối tượng phức tạp có nhiều thuộc tính và phương thức.
  • Khi bạn muốn sử dụng tính kế thừa để mở rộng hoặc tái sử dụng mã.
  • Khi đối tượng cần được chia sẻ và tham chiếu giữa các phần khác nhau của ứng dụng.

Kết Luận

Class là một công cụ mạnh mẽ trong Swift, hỗ trợ lập trình hướng đối tượng với các tính năng như kế thừa, tính đa hình và đóng gói. Với việc hiểu rõ cách sử dụng Class, bạn có thể xây dựng các ứng dụng Swift linh hoạt, dễ bảo trì và tối ưu hóa cho nhiều trường hợp sử dụng khác nhau. Hãy thực hành để làm chủ công cụ quan trọng này!

Mở rộng

  • Kế thừa trong Swift
  • Đa hình trong Swift
  • Protocol trong Swift
  • Extension trong Swift
  • Property observer
  • Access control