Hướng dẫn và ví dụ Swift Struct
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
// 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 kiểu 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ụ:
Emp Number: E01
Emp Name: John
Emp Position: CLECK
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.
- Struct không cho phép thừa kế từ một class hoặc một struct nào khác.
- 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 (pass) dưới dạng giá trị. Trong khi đó nếu đối tượng của 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 (reference).
StructVsClass.swift
import Foundation
// Một lớp
class MyClass {
var name: String = "Abc"
}
// Một struct
struct MyStruct {
var name: String = "Abc"
}
// Một hàm, 2 tham số.
// Tham số đầu tiên là lớp, tham số thứ hai là một struct.
func passToMe( myClass: MyClass, myStruct: MyStruct) {
// Thay đổi giá trị cho trường 'name'.
myClass.name = "New Name"
// Không thể thay đổi giá trị một trường của struct.
// (Nó là một bản copy, và các trường của nó trở thành các hằng số)
// myStruct.name = "New Name" ***
}
func test_passToMe() {
// Một đối tượng của MyClass.
var mc = MyClass()
print("mc.name = \(mc.name)") // Abc
// Một giá trị của MyStruct.
var ms = MyStruct()
print("Call passToMe function")
// Truyền các tham số vào hàm passToMe()
// Chú ý: Tham số đầu tiên không cần nhãn (Label).
passToMe( mc, myStruct: ms)
print("mc.name = \(mc.name)") // New Name
}
Chạy ví dụ:
mc.name = Abc
Call passToMe function
mc.name = New Name
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:
- Bạn thể viết một hoặc nhiều Constructor cho struct.
- 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 (method), 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:
- Swift Properties
Các hướng dẫn lập trình Swift
- Cài đặt Mac OS X 10.11 El Capitan trong VMWare
- Cài đặt XCode
- Hướng dẫn lập trình Swift cho người mới bắt đầu
- Hướng dẫn và ví dụ Swift Function
- Hướng dẫn và ví dụ Swift Closure
- Lớp và đối tượng trong Swift
- Hướng dẫn và ví dụ Swift Enum
- Hướng dẫn và ví dụ Swift Struct
- Lập trình theo nhóm sử dụng XCode và SVN
Show More