Migrasi ke Konkurensi Ketat
Terapkan pemeriksaan konkurensi Swift 6 secara bertahap.
Migrasi ke Konkurensi Ketat adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Apa Itu Konkurensi Ketat?
Pemeriksaan konkurensi ketat membuat kompiler mendiagnosis setiap potensi perlombaan data pada waktu kompilasi.
Dalam mode bahasa Swift 6, fitur ini aktif secara bawaan; dalam mode Swift 5, Anda mengaktifkannya secara bertahap.
Tiga Tingkat Pemeriksaan
Opsi -strict-concurrency memiliki tiga tingkat: minimal (bawaan dalam Swift 5), targeted (memeriksa kode yang sudah menggunakan konkurensi), dan complete (pemeriksaan lengkap bergaya Swift 6).
// Build settings example
// SWIFT_STRICT_CONCURRENCY = completeAdopsi Bertahap
Jalur yang disarankan adalah menaikkan tingkat secara bertahap: mulai dari targeted, perbaiki peringatannya, lalu beralih ke complete sebelum mengubah mode bahasa ke 6.
Dengan cara ini, migrasi tetap mudah dikelola pada basis kode yang besar.
// Step 1: targeted
// Step 2: complete (warnings)
// Step 3: Swift 6 mode (errors)Migrasi per Modul
Konkurensi ketat diatur per target. Anda dapat memigrasikan satu modul pada satu waktu, sementara modul lainnya tetap dalam mode Swift 5 sampai siap.
// Package.swift target
// swiftSettings: [.enableExperimentalFeature("StrictConcurrency")]Peringatan Umum: Penangkapan Nilai yang Tidak Dapat Dikirim
Diagnosis yang paling sering muncul adalah menangkap nilai yang tidak dapat dikirim dalam Task atau mengirimkannya melintasi batas aktor.
Perbaiki dengan menjadikan tipenya dapat dikirim atau hanya menyalin data yang dapat dikirim.
final class Model { var name = "" }
func start(_ m: Model) {
// Warning: non-Sendable Model captured by Task
// Task { print(m.name) }
}Memperbaiki dengan Tipe Nilai
Sering kali, perbaikan yang paling bersih adalah memodelkan data sebagai tipe nilai yang tidak berubah, yang secara otomatis dapat dikirim.
struct Model: Sendable { let name: String }
func start(_ m: Model) {
Task { print(m.name) } // safe now
}Memperbaiki dengan @MainActor
Tipe UI sering menimbulkan peringatan karena disentuh dari tugas latar belakang. Memberi anotasi @MainActor pada tipe mengikatnya ke thread utama dan menyelesaikan peringatan tersebut.
@MainActor
final class ViewModel {
var items: [String] = []
func reload() async {
let fetched = await load()
items = fetched
}
}
func load() async -> [String] { [] }Kesesuaian Dapat Dikirim untuk Tipe yang Sudah Ada
Untuk tipe yang Anda kendalikan dan sudah aman untuk utas, tambahkan kesesuaian eksplisit dengan Sendable atau @unchecked Sendable untuk menghilangkan peringatan secara jujur.
import Foundation
final class Counter: @unchecked Sendable {
private let lock = NSLock()
private var n = 0
}Impor Prakonkurensi
Jika dependensi belum memberi anotasi pada API-nya, @preconcurrency import melonggarkan pemeriksaan untuk modul tersebut, menurunkan tingkat kesalahan menjadi peringatan sampai dependensi itu diperbarui.
@preconcurrency import SomeLegacyFrameworkMenandai Simbol dengan @preconcurrency
Anda juga dapat menandai deklarasi individual dengan @preconcurrency agar pemanggil dari kode lama tidak mendapatkan kesalahan ketika Anda menambahkan persyaratan dapat dikirim.
@preconcurrency
func handle(_ value: Sendable) { }Memverifikasi Migrasi
Ketika pemeriksaan complete menghasilkan nol peringatan, ubah target ke mode Swift 6 agar jaminannya menjadi kesalahan yang ditegakkan dan tidak dapat kembali memburuk.
// Package.swift
// .target(name: "App", swiftSettings: [.swiftLanguageMode(.v6)])Pemeriksaan Singkat: Migrasi
Uji pemahaman Anda tentang migrasi konkurensi ketat.
Ringkasan: Bermigrasi ke Konkurensi Ketat
Pemeriksaan konkurensi ketat memindahkan deteksi perlombaan data ke waktu kompilasi, dengan tingkat minimal, targeted, dan complete. Migrasikan per modul, perbaiki penangkapan nilai yang tidak dapat dikirim dengan tipe nilai, @MainActor, atau kesesuaian dengan Dapat Dikirim yang jujur, dan gunakan @preconcurrency untuk mempermudah interoperabilitas dengan dependensi yang belum dimigrasikan.
Setelah complete bebas peringatan, aktifkan mode Swift 6 untuk mengunci jaminannya.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Migrasi ke Konkurensi Ketat” gratis?
Ya — teks lengkap “Migrasi ke Konkurensi Ketat” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Migrasi ke Konkurensi Ketat”?
Terapkan pemeriksaan konkurensi Swift 6 secara bertahap. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Migrasi ke Konkurensi Ketat” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Masalah Perlombaan Data
- Protocol Sendable
- Isolasi Actor dan nonisolated
- Migrasi ke Konkurensi Ketat