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