Hướng dẫn sử dụng Swift Struct
Công ty Vĩnh Cửu tuyển dụng lập trình viên Java

1- Struct là gì?

Trong Swift, Struct (cấu trúc) là một kiểu giá trị đặc biệt, nó tạo ra một biến để lưu trữ nhiều giá trị riêng lẻ, mà các các trị này có liên quan tới nhau.
Ví dụ thông tin về một nhân viên bao gồm:
  • Mã nhân viên
  • Tên nhân viên
  • Chức vụ
Bạn có thể tạo ra 3 biến để lưu trữ các thông tin trên của nhân viên. Tuy nhiên bạn có thể tạo ra một Struct để lưu trữ cả 3 thông tin trên trong một biến duy nhất.
Swift sử dụng từ khóa struct để khai báo một Struct.
Employee.swift
import Foundation



struct Employee {

   var empNumber:String
   var empName:String
   var position:String
 
   // Phương thức tạo đối tượng (Constructor).
   init(empNumber:String, empName:String, position:String) {
      self.empNumber = empNumber;
      self.empName = empName;
      self.position = position;
  }
 
}
Ví dụ sử dụng Struct:
EmployeeTest.swift
import Foundation


 
func test_EmployeeStruct()     {
 
   // Tạo một biến từ Struct Employee.
   let john = Employee(empNumber:"E01",empName: "John",position: "CLERK")
 
   print("Emp Number: " + john.empNumber)
   print("Emp Name: " + john.empName)
   print("Emp Position: " + john.position)

}
Sửa file main.swift:
main.swift
import Foundation

test_EmployeeStruct()
Chạy ví dụ:

2- Struct so với Class

Struct thường được sử dụng để tạo ra một đối tượng để lưu trữ các giá trị, trong khi đó class được sử dụng đa dạng hơn.
  1. Struct không cho phép thừa kế từ một class hoặc một struct nào khác.
  2. Nhưng Struct cho phép thừa kế từ 1 hoặc nhiều Protocol.
Nếu struct xuất hiện như một tham số trong một hàm (hoặc phương thức), nó được truyền dưới dạng giá trị. Trong khi đó nếu class xuất hiện như là một tham số trong một hàm (hoặc phương thức) nó được truyền (pass) như một tham chiếu.
StructVsClass.swift
import Foundation


// Một class
class MyClass  {
 
   var name: String = "Abc"
 
}

// Một Struct
struct MyStruct {
 
   var name: String = "Abc"

}



// Một hàm, truyền vào tham số kiểu class, và kiểu Struct.
func passToMe( myClass: MyClass, myStruct: MyStruct)   {
 
   // Thay đổi giá trị trường name.
   myClass.name = "New Name"
 
   // Thay đổi giá trị trường name.
   // myStruct truyền vào hàm là một bản Copy,
   // các trường của nó trở thành hằng số và không thể thay đổi.
   // myStruct.name = "New Name" ***
 
}


func test_passToMe()   {
 
   // Tạo một đối tượng MyClass
   var  mc = MyClass()
 
   print("mc.name = \(mc.name)") // Abc
 
   // Tạo một đối tượng MyStruct.
   var ms = MyStruct()
 
 
   print("Call passToMe function")
 
   // Truyền vào hàm passToMe()
   // Chú ý gọi hàm: Tham số đầu tiên không yêu cầu nhãn (Label).
   passToMe( mc, myStruct: ms)
 
 
   print("mc.name = \(mc.name)") // New Name
 
}
Chạy ví dụ:

3- Constructor của Struct

Struct có thể có các Constructor (Phương thức khởi tạo), nhưng không có Destructor (Phương thức hủy đối tượng).
Dưới đây là một số chú ý đối với Constructor:
  1. Bạn thể viết một hoặc nhiều Constructor cho struct.
  2. Trong Constructor bạn phải gán các giá trị cho tất cả các trường chưa có giá trị.

4- Phương thức và thuộc tính của Struct

Struct có thể có các phương thức, thuộc tính (property):
Book.swift
import Foundation


struct Book  {
 
   // Property
   var title:String    {
      get    {
        return self.title;
      }
      set (value)   {
        self.title = value
      }
   }
 
   // Property
   var author:String    {
     
       get {
        return self.author;
       }
       set(value)  {
           self.author = value;
       }
     
   }
 
   // Constructor.
   init(  title:String, author:String)  {
     
      self.title = title;
     
      self.author = author;
     
   }
 
   // Method.
   func getInfo() -> String     {
     
       return "Book Title: " + self.title + ", Author: " + self.author;
     
   }
 
}
Xem thêm về thuộc tính (Property) tại:
  • TODO: LINK??

5- Struct và Protocol

Struct có thể thừa kế từ một hoặc nhiều Protocol.
  • TODO: TAI LIEU DANG CAP NHAP.