0Pricing
Swift Academy · Lekcja

Migracja do ścisłej współbieżności

Stopniowe wdrażanie sprawdzania współbieżności w Swift 6.

Migracja do ścisłej współbieżności to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Czym jest ścisłe sprawdzanie współbieżności?

Ścisłe sprawdzanie współbieżności sprawia, że kompilator wykrywa podczas kompilacji każdą potencjalną sytuację wyścigu danych.

W trybie języka Swift 6 jest ono domyślnie włączone, natomiast w trybie Swift 5 można je włączać stopniowo.

Trzy poziomy sprawdzania

Flaga -strict-concurrency ma trzy poziomy: minimal (domyślny w Swift 5), targeted (sprawdza kod, który już korzysta ze współbieżności) oraz complete (pełne sprawdzanie w stylu Swift 6).

// Build settings example
// SWIFT_STRICT_CONCURRENCY = complete

Stopniowe wdrażanie

Zalecana ścieżka polega na stopniowym zwiększaniu poziomu: zacznij od targeted, popraw ostrzeżenia, a następnie przejdź do complete przed przełączeniem trybu języka na 6.

Dzięki temu migracja dużych baz kodu pozostaje możliwa do opanowania.

// Step 1: targeted
// Step 2: complete (warnings)
// Step 3: Swift 6 mode (errors)

Migracja moduł po module

Ścisłe sprawdzanie współbieżności jest ustawiane dla każdego celu osobno. Można migrować jeden moduł naraz, pozostawiając pozostałe w trybie Swift 5 do czasu ich przygotowania.

// Package.swift target
// swiftSettings: [.enableExperimentalFeature("StrictConcurrency")]

Typowe ostrzeżenie: przechwycenie wartości innej niż Sendable

Najczęściej pojawiającym się komunikatem diagnostycznym jest przechwycenie wartości innej niż Sendable w obiekcie Task lub przekazanie jej przez granicę aktora.

Napraw to, sprawiając, że typ będzie zgodny z Sendable, albo kopiując wyłącznie dane typu Sendable.

final class Model { var name = "" }
func start(_ m: Model) {
    // Warning: non-Sendable Model captured by Task
    // Task { print(m.name) }
}

Naprawa za pomocą typów wartości

Często najczystszym rozwiązaniem jest modelowanie danych jako niemutowalnego typu wartości, który automatycznie jest typu Sendable.

struct Model: Sendable { let name: String }
func start(_ m: Model) {
    Task { print(m.name) } // safe now
}

Naprawa za pomocą @MainActor

Typy interfejsu użytkownika często powodują ostrzeżenia, ponieważ są używane z zadań działających w tle. Oznaczenie typu jako @MainActor przypisuje go do głównego wątku i usuwa ostrzeżenia.

@MainActor
final class ViewModel {
    var items: [String] = []
    func reload() async {
        let fetched = await load()
        items = fetched
    }
}
func load() async -> [String] { [] }

Zgodność istniejących typów z Sendable

W przypadku typów, nad którymi mają Państwo kontrolę i które są już bezpieczne wątkowo, należy jawnie dodać zgodność z Sendable lub @unchecked Sendable, aby uczciwie usunąć ostrzeżenia.

import Foundation
final class Counter: @unchecked Sendable {
    private let lock = NSLock()
    private var n = 0
}

Importy preconcurrency

Gdy zależność nie ma jeszcze adnotacji w swoim API, @preconcurrency import łagodzi sprawdzanie dla tego modułu, zamieniając błędy na ostrzeżenia do czasu jego aktualizacji.

@preconcurrency import SomeLegacyFramework

Oznaczanie symboli jako @preconcurrency

Można również oznaczać poszczególne deklaracje jako @preconcurrency, aby kod wywołujący ze starszego kodu nie otrzymywał błędów po dodaniu wymagań Sendable.

@preconcurrency
func handle(_ value: Sendable) { }

Weryfikowanie migracji

Gdy sprawdzanie complete nie generuje żadnych ostrzeżeń, przełącz cel na tryb Swift 6, aby gwarancje stały się wymuszanymi błędami i nie mogły ulec pogorszeniu.

// Package.swift
// .target(name: "App", swiftSettings: [.swiftLanguageMode(.v6)])

Szybki sprawdzian: migracja

Sprawdź swoją wiedzę na temat migracji do ścisłej współbieżności.

Podsumowanie: migracja do ścisłej współbieżności

Ścisłe sprawdzanie współbieżności przenosi wykrywanie wyścigów danych do etapu kompilacji i obejmuje poziomy minimal, targeted oraz complete. Migruj moduły osobno, naprawiaj przechwycenia wartości innych niż Sendable za pomocą typów wartości, @MainActor lub uczciwej zgodności z Sendable, a do ułatwienia współpracy z niemigrowanymi zależnościami używaj @preconcurrency.

Po usunięciu wszystkich ostrzeżeń przy poziomie complete włącz tryb Swift 6, aby utrwalić te gwarancje.

Często zadawane pytania

Czy lekcja „Migracja do ścisłej współbieżności” jest bezpłatna?

Tak — pełny tekst „Migracja do ścisłej współbieżności” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Migracja do ścisłej współbieżności”?

Stopniowe wdrażanie sprawdzania współbieżności w Swift 6. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Migracja do ścisłej współbieżności”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Problem wyścigu danych
  2. Protokół Sendable
  3. Izolacja aktorów i nonisolated
  4. Migracja do ścisłej współbieżności
← Powrót do Swift Academy