Optionals
1. Giới thiệu
Phần tiêu đề “1. Giới thiệu”Optional là một tính năng đặc trưng của Swift, cho phép biến có giá trị hoặc nil.
var name: String = "Alice"// name = nil // Error!
var optionalName: String? = "Alice"optionalName = nil // OK2. Khai báo Optional
Phần tiêu đề “2. Khai báo Optional”Thêm dấu ? sau kiểu dữ liệu:
var age: Int? = 25var email: String? = nilvar height: Double? = 1.753. Unwrapping Optionals
Phần tiêu đề “3. Unwrapping Optionals”3.1. Force Unwrapping với !
Phần tiêu đề “3.1. Force Unwrapping với !”Cảnh báo: Gây crash nếu giá trị là nil!
var name: String? = "Alice"print(name!) // Alice
name = nil// print(name!) // Runtime error: Fatal error!3.2. Optional Binding với if let
Phần tiêu đề “3.2. Optional Binding với if let”var name: String? = "Alice"
if let unwrappedName = name { print("Name: \(unwrappedName)")} else { print("Name is nil")}3.3. Optional Binding với guard let
Phần tiêu đề “3.3. Optional Binding với guard let”func greet(name: String?) { guard let unwrappedName = name else { print("No name provided") return } print("Hello, \(unwrappedName)")}3.4. Nil-Coalescing Operator ??
Phần tiêu đề “3.4. Nil-Coalescing Operator ??”var name: String? = nillet displayName = name ?? "Guest"print(displayName) // Guest3.5. Optional Chaining với ?.
Phần tiêu đề “3.5. Optional Chaining với ?.”var name: String? = "Alice"let length = name?.count // Optional(5)
name = nillet length2 = name?.count // nil4. Implicitly Unwrapped Optionals
Phần tiêu đề “4. Implicitly Unwrapped Optionals”var name: String! = "Alice"print(name) // Tự động unwrap
// Vẫn có thể nilname = nil// print(name) // Crash!5. Multiple Optional Binding
Phần tiêu đề “5. Multiple Optional Binding”let name: String? = "Alice"let age: Int? = 25
if let unwrappedName = name, let unwrappedAge = age { print("\(unwrappedName), \(unwrappedAge) years old")}6. So sánh với Kotlin
Phần tiêu đề “6. So sánh với Kotlin”| Swift | Kotlin | Ghi chú |
|---|---|---|
String? |
String? |
Nullable type |
name! |
name!! |
Force unwrap |
if let |
name?.let { } |
Safe unwrap |
name ?? "default" |
name ?: "default" |
Default value |
name?.count |
name?.length |
Optional chaining |
📝 Tóm tắt
Phần tiêu đề “📝 Tóm tắt”Type?- Optional type!- Force unwrap (nguy hiểm!)if let- Safe unwrappingguard let- Early return??- Default value?.- Optional chaining- Tránh force unwrap
!khi có thể