Skip to Content

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 // OK

2. 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.75

3. 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) // Guest

3.5. Optional Chaining với ?.

var name: String? = "Alice" let length = name?.count // Optional(5) name = nil let length2 = name?.count // nil

4. 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

SwiftKotlinGhi chú
String?String?Nullable type
name!name!!Force unwrap
if letname?.let { }Safe unwrap
name ?? "default"name ?: "default"Default value
name?.countname?.lengthOptional chaining

📝 Tóm tắt

  • Type? - Optional type
  • ! - Force unwrap (nguy hiểm!)
  • if let - Safe unwrapping
  • guard let - Early return
  • ?? - Default value
  • ?. - Optional chaining
  • Tránh force unwrap ! khi có thể
Last updated on