Skip to Content

Struct trong Swift

1. Giới thiệu

Struct là value type dùng để định nghĩa custom data types.

2. Khai báo Struct

struct Person { var name: String var age: Int } var person = Person(name: "Alice", age: 25) print(person.name) // Alice

3. Memberwise Initializer

struct Point { var x: Double var y: Double // Swift tự động tạo init(x:y:) } let point = Point(x: 10, y: 20)

4. Custom Initializer

struct Rectangle { var width: Double var height: Double init(width: Double, height: Double) { self.width = width self.height = height } init(side: Double) { self.width = side self.height = side } } let rect = Rectangle(width: 10, height: 20) let square = Rectangle(side: 5)

5. Computed Properties

struct Circle { var radius: Double var area: Double { return .pi * radius * radius } var circumference: Double { return 2 * .pi * radius } } let circle = Circle(radius: 5) print(circle.area) // 78.54...

6. Methods

struct Counter { var count = 0 mutating func increment() { count += 1 } mutating func reset() { count = 0 } func describe() -> String { return "Count is \(count)" } } var counter = Counter() counter.increment() print(counter.describe())

7. Static Properties và Methods

struct Math { static let pi = 3.14159 static func square(_ n: Double) -> Double { return n * n } } print(Math.pi) print(Math.square(5))

8. Value Type Semantics

struct Point { var x: Int var y: Int } var point1 = Point(x: 10, y: 20) var point2 = point1 // Copy được tạo point2.x = 100 print(point1.x) // 10 (không thay đổi) print(point2.x) // 100

9. Conform to Protocols

struct Person: Codable, Hashable { let name: String let age: Int } // Codable cho JSON let person = Person(name: "Alice", age: 25) let data = try! JSONEncoder().encode(person) // Hashable cho Set/Dictionary var people: Set<Person> = [person]

10. Ví dụ thực tế

struct User: Codable { let id: Int let name: String let email: String var displayName: String { name.isEmpty ? "Unknown" : name } func validate() -> Bool { return !name.isEmpty && email.contains("@") } } struct APIResponse<T: Codable>: Codable { let status: Int let data: T? let message: String? }

📝 Tóm tắt

  • Struct là value type (copy on assign)
  • Memberwise initializer tự động
  • mutating cho methods thay đổi self
  • static cho type-level members
  • Phổ biến cho models, DTOs
  • Conform Codable cho JSON
Last updated on