Optionals trong Swift
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
Thêm dấu ? sau kiểu dữ liệu:
var age: Int? = 25
var email: String? = nil
var height: Double? = 1.753. Unwrapping Optionals
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
var name: String? = "Alice"
if let unwrappedName = name {
print("Name: \(unwrappedName)")
} else {
print("Name is nil")
}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 ??
var name: String? = nil
let displayName = name ?? "Guest"
print(displayName) // Guest3.5. Optional Chaining với ?.
var name: String? = "Alice"
let length = name?.count // Optional(5)
name = nil
let length2 = name?.count // nil4. Implicitly Unwrapped Optionals
var name: String! = "Alice"
print(name) // Tự động unwrap
// Vẫn có thể nil
name = nil
// print(name) // Crash!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
| 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
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ể
Last updated on
Swift