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.
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 unaffectedKolekcje 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.
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
- Podstawy ARC: strong / weak / unowned
- Cykle retencji i ich przerywanie za pomocą weak/unowned
- Typy wartości ograniczające współdzielenie