Section 7/101 menit
7. Kapan Menggunakan Setiap Pendekatan
7. Kapan Menggunakan Setiap Pendekatan
Decision Tree
swift
Apa yang ingin kamu guard?
│
├── Syntax / fitur language (typed throws, ~Copyable)
│ └── Gunakan: #if swift(>=6.0) atau #if hasFeature(FeatureName)
│
├── Module baru (Synchronization, Observation)
│ └── Gunakan: #if canImport(ModuleName)
│
├── Versi toolchain/compiler (Xcode version)
│ └── Gunakan: #if compiler(>=6.0)
│
├── API yang tersedia di OS versi tertentu
│ └── Gunakan: @available(iOS X, *) atau #available(iOS X, *)
│
└── Ingin aktifkan fitur Swift 6 satu per satu (tanpa full migration)
└── Gunakan: enableUpcomingFeature di Package.swift / Build Settings
Tabel Perbandingan
| Directive | Berdasarkan | Compile-time? | Contoh penggunaan |
|---|---|---|---|
#if swift(>=6.0) |
Language version (SWIFT_VERSION) | Ya | Typed throws, Sendable |
#if compiler(>=6.0) |
Toolchain version (Xcode) | Ya | API compiler baru |
#if canImport(X) |
Ketersediaan module | Ya | Synchronization, Observation |
#if hasFeature(X) |
Fitur language spesifik | Ya | NoncopyableGenerics |
@available(iOS X) |
OS version | Runtime | API OS baru |
#available(iOS X) |
OS version | Runtime | Branching runtime |
enableUpcomingFeature |
Opt-in per fitur | Build setting | Migrasi bertahap |