Swift Academy · Lekcja

Typy wartości ograniczające współdzielenie

Preferujcie typy wartości , aby unikać przypadkowego współdzielenia: structs/enums są kopiowane podczas przypisania, co pomaga zapewnić izolację, przewidywalność i bezpieczeństwo wątkowe.

Lekcja 3 z 38 kroki

Typy wartości ograniczające współdzielenie to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 3 z 3. 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 3 lekcji w sumie.

Dlaczego typy wartości?

Swift structs/enums to typy wartości: przypisanie i przekazywanie tworzą kopie. Ogranicza to przypadkowe współdzielenie i ułatwia analizowanie stanu.

Współdzielenie referencji (class)

Klasy są typami referencyjnymi: wiele zmiennych może wskazywać na tę samą instancję, więc mutacje są widoczne za pośrednictwem aliasów.

final class Bag {
    var items: [String]
    init(_ items: [String]) { self.items = items }
}
let a = Bag(["pen"])
let b = a            // REF COPY: a and b refer to the same object
b.items.append("book")
print(a.items)       // ["pen","book"] — mutated via b
print(b.items)

Niezależne kopie (struct)

Struktury są kopiowane przy przypisaniu. Każda zmienna ma własne dane, a mutacje pozostają lokalne.

struct Point { var x: Int; var y: Int }
var p1 = Point(x: 1, y: 2)
var p2 = p1          // VALUE COPY: independent
p2.x = 99
print(p1.x, p2.x)    // 1, 99 — p1 unaffected

Kolekcje copy-on-write

Array/Dictionary/Set to typy wartości z mechanizmem copy-on-write. Gdy modyfikowana tablica nie jest wskazywana wyłącznie przez jedną referencję, Swift tworzy nową kopię.

var a1 = [1,2,3]
var a2 = a1      // copy-on-write handle
a2.append(4)     // triggers copy if a1 is uniquely referenced
print(a1)        // [1,2,3]
print(a2)        // [1,2,3,4]

Aktualizacje w stylu czystym

Należy projektować interfejsy API w stylu prawie czystym: przyjmować wartość i zwracać nową wartość. Dzięki temu kod wywołujący unika nieoczekiwanych współdzielonych mutacji.

struct Profile {
    var name: String
    var tags: [String]
}
func addTag(_ p: Profile, _ tag: String) -> Profile {
    var copy = p          // work on a value copy
    copy.tags.append(tag) // caller gets a new updated value
    return copy
}
let pA = Profile(name: "Ana", tags: [])
let pB = addTag(pA, "swift")
print(pA.tags)  // []
print(pB.tags)  // ["swift"]

Trafny wybór

Wskazówki:

  • Należy preferować struct dla małych, niezmiennych lub modyfikowanych lokalnie danych.
  • Należy używać class, gdy wymagana jest tożsamość, współdzielony zmienny stan lub dziedziczenie.
  • Typy wartości ograniczają współdzielenie i ułatwiają bezpieczne analizowanie współbieżności.

Współdzielenie wartości a referencji

Szybkie sprawdzenie: Dlaczego typy wartości pomagają unikać niezamierzonego współdzielenia?

Podsumowanie

Podsumowanie: Struktury i wyliczenia są wartościami. Należy ich używać, aby ograniczyć współdzielony zmienny stan. Kolekcje stosują mechanizm copy-on-write, dzięki czemu mutacje nie zaskakują innych posiadaczy.

Bezpłatny start

Ucz się Swift dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
122
Lekcje
409

Często zadawane pytania

Czy lekcja „Typy wartości ograniczające współdzielenie” jest bezpłatna?

Tak — pełny tekst „Typy wartości ograniczające współdzielenie” 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 3 lekcji w sumie.

Co nauczysz się w „Typy wartości ograniczające współdzielenie”?

Preferujcie typy wartości , aby unikać przypadkowego współdzielenia: structs/enums są kopiowane podczas przypisania, co pomaga zapewnić izolację, przewidywalność i bezpieczeństwo wątkowe. Ć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 3 z 3.

Ile czasu zajmuje lekcja „Typy wartości ograniczające współdzielenie”?

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. Podstawy ARC: strong / weak / unowned
  2. Cykle retencji i ich przerywanie za pomocą weak/unowned
  3. Typy wartości ograniczające współdzielenie
← Powrót do Swift Academy