Chúng ta hãy nghĩ về các class giống như một khuôn mẫu mà một nhà sản xuất sử dụng để sản xuất ra sản phẩm. Và bạn có thể tạo nhiều sản phẩm từ một khuôn. Trong Swift, chúng ta có thể sử dụng một class để tạo ra nhiều đối tượng (sản phẩm) bao gồm các thuộc tính và phương thức cho đối tượng đó.

Hãy xem đoạn code dưới đây:

Cú pháp cơ bản của class:

class Name {
 // Properties, init, funcs here
}

Nếu bạn đã làm việc với Struct, bạn sẽ thấy cú pháp của Class tương tự với Struct

Xem một ví dụ về class Person:

Trong class, sẽ có các thuộc tính tên và tuổi, sau đó chúng ta khởi tạo cho nó.

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

init là trình khởi tạo - một phương thức (method) mà class sẽ gọi đến khi chúng ta tạo một đối tượng Person.

Trong trình khởi tạo, chúng ta chuyền vào tham số là tên và tuổi của đối tượng Person

var person1 = Person(name: "Farhan", age: 21)

Chúng ta khởi tạo một Person và gán cho biến person1, sau đó chúng ta có thể gọi ra các thuộc tính của person thông qua biến person1

person1.name
person1.age

 

Functions trong Class

Chúng ta cũng có thể viết các hàm trong class sẽ, nó sẽ cho phép người dùng gọi:

class Person {
    var name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    func getName() -> String {
        return "Your name is \(name)"
    }
    
}

Hàm getName() sẽ trả về một String và chúng ta có thể gọi nó từ bên ngoài

person1.getName()

 

Class là mộtkiểu tham chiếu

Class là một kiểu tham chiếu trong khi struct lại là kiểu tham trị. 

Cùng xem ví dụ để hiểu rõ hơn

Tạo một đối tượng mới person2

var person2 = Person(name: "Steve", age: 56)

Tạo một biến mới - person3 và gán bằng person2

var person3 = person2

Sau đó, chúng ta thay đổi thuộc tính của person3

person3.age = 35

và xem cách mà thuộc tính của person2 thay đổi:

print(person2.age)
print(person3.age)

Đọc màn hình console và bạn có thể thấy age của person2person3 là giống nhau.

Tại sao lại như vậy?

Bởi vì bản chất person3person2

Khi chúng ta lưu trữ một Class, hệ thống sẽ lưu trữ thông tin này trong ô nhớ và person2 đang giữ một tham chiếu đến ô nhớ đó.

Khi chúng ta tạo person3 bằng với person2, thì bản chất là 2 đối tượng cùng tham chiếu đến ô nhớ đó

Vậy nên, person3 không phải là một bản copy của person2 mà chính là person2, đây là điều khác biệt lớn nhất giữa StructClass

Bài viết được tham khảo tại medium