Class và đối tượng trong Swift
Công ty Vĩnh Cửu tuyển dụng lập trình viên Java

1- Giới thiệu

Tài liệu được viết dựa trên:
  • Swift 2.x

  • XCode 7.3

2- Class đầu tiên của bạn

Swift là một ngôn ngữ kế thừa ngôn ngữ CObjective-C, nó vừa là một ngôn ngữ hướng thủ tục, vừa là một ngôn ngữ hướng đối tượng. Class chính là một khái niệm của các ngôn ngữ lập trình hướng đối tượng. Class có các thuộc tính và các phương thức, về bản chất phương thức (method) được hiểu là một hàm của class. Từ class bạn có thể tạo ra các đối tượng.
Swift sử dụng từ khóa class để khai báo một Class.
Tạo một file nguồn Rectangle.swift:
Rectangle.swift
import Foundation

// Một class mô phỏng một hình chữ nhật
class Rectangle  {
   
    // Thuộc tính chiều rộng
    var width: Int = 5;
   
    // Thuộc tính chều cao.
    var height: Int = 10;
   
    // Phương thức khởi tạo mặc định (Không có tham số).
    // (Phương thức tạo đối tượng mặc định).
    init()  {
       
    }
   
    // Phương thức khởi tạo (Phương thức tạo đối tượng).
    // self.width tham chiếu tới thuộc tính width của class.
    init (width: Int, height: Int)  {
        self.width = width
        self.height = height
   
    }
   
    // Một hàm tính diện tích của hình chữ nhật.
    func getArea()  -> Int  {
       
        var area = self.width * self.height
        return area
    }
   
   
}
Đoạn code sử dụng class Rectangle để tạo ra các đối tượng.
RectangleTest.swift
import Foundation


func test_rectangle()  {
   
    print("Create a Rectangle rec1");
   
    // Tạo mới một đối tượng Rectangle.
    // theo phương thức tạo đối tượng không tham số: init()
    var rec1  = Rectangle()
   
   
    // In ra các thuộc tính width, height của đối tượng.
   
    print("rec1.width = \(rec1.width)")
    print("rec1.height = \(rec1.height)")
   
    // Gọi phương thức tính diện tích của đối tượng.
    var area1 = rec1.getArea()
   
    print("area1 = \(area1)")
   
   
    print("---------")
   
    print("Create a Rectangle rec2");
   
    // Tạo một đối tượng Rectangle.
    // theo phương thức tạo đối tượng 2 tham số: init(Int,Int)
    var rec2 = Rectangle(width: 10, height: 15)
   
   
    // In ra các thuộc tính width, height của đối tượng.
   
    print("rec2.width = \(rec2.width)")
    print("rec2.height = \(rec2.height)")
   
    // Gọi phương thức tính diện tích của đối tượng.
    var area2 = rec2.getArea()
   
    print("area2 = \(area2)")
   
}
 
Sửa file main.swift để test ví dụ:
main.swift
import Foundation

test_rectangle()
 
Chạy ví dụ:
Bây giờ bạn cần xem các giải thích về Class, nó vô cùng quan trọng.
Điều gì xẩy ra khi bạn tạo một đối tượng theo phương thức tạo đối tượng mặc định?
Tạo đối tượng Rectangle bằng phương thức tạo đối tượng 2 tham số.

3- Quy tắc gọi Constructor

Swift 2.1 đặt ra một quy tắc gọi hàm, phương thức, constructor, dưới đây là các quy tắc:
  • Tham số đầu tiên truyền cho hàm (hoặc phương thức) không yêu cầu nhãn tham số (Label)
  • Các tham số khác truyền cho hàm (hoặc phương thức) yêu cầu phải có nhãn tham số.
  • Tất cả các tham số truyền vào cho Constructor yêu cầu phải có nhãn tham số (Label)

4- Toán tử so sánh đối tượng

Trong Swift, khi bạn tạo một đối tượng thông qua phương thức khởi tạo (Constructor) sẽ có một thực thể thực sự được tạo ra nằm trên bộ nhớ, nó có một địa chỉ xác định.

Một phép toán gán đối tượng AA bởi một đối tượng BB không tạo ra thêm thực thể trên bộ nhớ, nó chỉ là trỏ địa chỉ của AA tới địa chỉ của BB.
Toán tử === dùng để so sánh địa chỉ 2 đối tượng trỏ đến, nó trả về true nếu cả 2 đối tượng cùng trỏ tới cùng một địa chỉ trên bộ nhớ. Toán tử !== cũng sử dụng để so sánh 2 địa chỉ của 2 đối tượng trỏ đến, nó trả về true nếu 2 đối tượng trỏ tới 2 địa chỉ khác nhau.
IdentifyOperator.swift
import Foundation


func identifyOperator()    {
   
   
    // Tạo đối tượng r1
   
    var r1 = Rectangle(width: 20,height: 10)
   
    // Tạo đối tượng r2
   
    var r2 = Rectangle(width: 20,height: 10)
   
    var r3 = r1
   
   
    var  b12:Bool =   r1 === r2
    var  b13:Bool =   r1 === r3
   
    print("r1 === r2 ?  \(b12)") // false
    print("r1 === r3 ?  \(b13)") // true
   
   
    var bb12: Bool = r1 !== r2
    var bb13: Bool = r1 !== r3
   
 
    print("r1 !== r2 ?  \(b12)") // true
    print("r1 !== r3 ?  \(b13)") // false
   
}
Chạy ví dụ: