Enumerations
1. Giới thiệu
Phần tiêu đề “1. Giới thiệu”Enum định nghĩa một tập hợp các giá trị liên quan.
2. Khai báo cơ bản
Phần tiêu đề “2. Khai báo cơ bản”enum Direction { case north case south case east case west}
// Hoặc trên một dòngenum Color { case red, green, blue }
var direction = Direction.northdirection = .south // Type inference3. Enum trong Switch
Phần tiêu đề “3. Enum trong Switch”enum Day { case monday, tuesday, wednesday, thursday, friday, saturday, sunday}
func describe(_ day: Day) -> String { switch day { case .saturday, .sunday: return "Weekend!" case .friday: return "TGIF!" default: return "Weekday" }}4. Enum với Raw Values
Phần tiêu đề “4. Enum với Raw Values”enum StatusCode: Int { case ok = 200 case created = 201 case badRequest = 400 case notFound = 404}
let code = StatusCode.notFoundprint(code.rawValue) // 404
// Từ raw valueif let status = StatusCode(rawValue: 200) { print(status) // ok}5. String Raw Values
Phần tiêu đề “5. String Raw Values”enum Planet: String { case mercury, venus, earth, mars}
print(Planet.earth.rawValue) // "earth"
enum Currency: String { case usd = "USD" case eur = "EUR" case vnd = "VND"}6. Associated Values
Phần tiêu đề “6. Associated Values”enum Result { case success(data: String) case failure(error: Error)}
let result = Result.success(data: "Hello")
switch result {case .success(let data): print("Got: \(data)")case .failure(let error): print("Error: \(error)")}7. Methods trong Enum
Phần tiêu đề “7. Methods trong Enum”enum Temperature { case celsius(Double) case fahrenheit(Double)
var celsius: Double { switch self { case .celsius(let c): return c case .fahrenheit(let f): return (f - 32) * 5/9 } }
func description() -> String { return "\(celsius)°C" }}8. Computed Properties
Phần tiêu đề “8. Computed Properties”enum Weekday: Int { case monday = 1, tuesday, wednesday, thursday, friday, saturday, sunday
var isWeekend: Bool { self == .saturday || self == .sunday }
var shortName: String { String(String(describing: self).prefix(3).uppercased()) }}9. CaseIterable
Phần tiêu đề “9. CaseIterable”enum Beverage: CaseIterable { case coffee, tea, juice}
// Lấy tất cả casesfor drink in Beverage.allCases { print(drink)}
print(Beverage.allCases.count) // 310. Recursive Enums
Phần tiêu đề “10. Recursive Enums”indirect enum ArithmeticExpr { case number(Int) case addition(ArithmeticExpr, ArithmeticExpr) case multiplication(ArithmeticExpr, ArithmeticExpr)}
func evaluate(_ expr: ArithmeticExpr) -> Int { switch expr { case .number(let n): return n case .addition(let a, let b): return evaluate(a) + evaluate(b) case .multiplication(let a, let b): return evaluate(a) * evaluate(b) }}
let expr = ArithmeticExpr.multiplication( .addition(.number(5), .number(3)), .number(2))print(evaluate(expr)) // 16📝 Tóm tắt
Phần tiêu đề “📝 Tóm tắt”- Enum nhóm related values
- Raw values: Int, String, etc.
- Associated values cho complex data
- Methods và computed properties
- CaseIterable cho iteration
indirectcho recursive enums