0Pricing
Swift Academy · Lekcja

Zrozumienie tożsamości widoków

Kontrolowanie sposobu, w jaki SwiftUI porównuje i ponownie wykorzystuje widoki.

Zrozumienie tożsamości widoków to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 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.

Tożsamość steruje SwiftUI

SwiftUI śledzi każdy widok za pomocą jego tożsamości, aby zdecydować, czy zaktualizować istniejący widok, czy utworzyć nowy.

Właściwe określenie tożsamości jest najważniejszym czynnikiem wpływającym na poprawność i wydajność.

Dwa rodzaje tożsamości

SwiftUI używa dwóch form: tożsamości strukturalnej (pozycji widoku w drzewie widoków) oraz tożsamości jawnej (identyfikatora przypisanego przez Państwa).

Tożsamość strukturalna

Domyślnie tożsamość widoku wynika z jego położenia w hierarchii. Poniższe gałęzie if tworzą dwa strukturalnie różne widoki.

var body: some View {
    if isOn {
        Text("On")  // one identity
    } else {
        Text("Off") // a different identity
    }
}

Dlaczego gałęzie tracą stan

Ponieważ każda gałąź ma inną tożsamość strukturalną, przełączanie między nimi niszczy pierwszy widok i tworzy drugi. Każdy znajdujący się w nim element @State zostaje zresetowany.

if isExpanded {
    DetailView() // new instance each time the branch flips
} else {
    SummaryView()
}

Jawna tożsamość za pomocą id()

Modyfikator .id(_:) przypisuje jawną tożsamość. Zmiana identyfikatora informuje SwiftUI: „to inny widok”, wymuszając utworzenie nowej instancji i zresetowanie stanu.

CounterView()
    .id(selectedTab) // new identity per tab

Tożsamość w ForEach

ForEach wymaga stabilnej tożsamości każdego elementu. Użyj ścieżki klucza prowadzącej do stabilnego identyfikatora, nigdy zaś indeksu tablicy w przypadku kolekcji mutowalnych.

ForEach(items, id: \.id) { item in
    RowView(item: item)
}

Pułapka tożsamości indeksu

Użycie id: \.self dla indeksów lub zmieniających się wartości powoduje zmianę przypisania tożsamości po modyfikacji danych, co prowadzi do nieprawidłowych animacji i utraty stanu.

// Risky if items reorder or values repeat:
// ForEach(0..<items.count, id: \.self) { ... }

Tożsamość a animacja

Animacje interpolują między stanami tej tożsamości. Jeśli tożsamość się zmieni, SwiftUI wykona przejście wstawienia/usunięcia zamiast płynnej animacji.

withAnimation {
    // same identity -> property animates
    // changed id     -> transition (fade/slide)
}

Modyfikatory warunkowe zmieniają tożsamość

Zastosowanie modyfikatora wewnątrz if może zmienić tożsamość strukturalną i zresetować stan. Lepiej użyć jednego widoku, którego wartość modyfikatora jest obliczana warunkowo.

// Better: keep one identity
Text("Hi")
    .opacity(isHidden ? 0 : 1)
// Worse: branching creates two identities

AnyView usuwa informacje o tożsamości

Opakowanie widoków w AnyView ukrywa ich typ przed SwiftUI, ograniczając możliwość wydajnego porównywania. Jeśli to możliwe, zamiast tego używaj konkretnych typów lub @ViewBuilder.

// Prefer @ViewBuilder over returning AnyView
@ViewBuilder
func content() -> some View {
    if flag { A() } else { B() }
}

Stabilna tożsamość = stabilny stan

Praktyczna zasada: zachowuj stabilną tożsamość, gdy chcesz utrzymać stan i płynną animację; zmieniaj tożsamość celowo, gdy rzeczywiście potrzebujesz nowego początku.

Szybkie sprawdzenie: tożsamość widoku

Sprawdź swoją wiedzę na temat tożsamości widoków.

Podsumowanie: zrozumienie tożsamości widoków

SwiftUI identyfikuje widoki strukturalnie (pozycja w drzewie) i jawnie (.id). Stabilna tożsamość zachowuje @State i umożliwia płynną animację właściwości; zmiana tożsamości resetuje stan i uruchamia przejścia.

Nadaj elementom ForEach stabilne identyfikatory, unikaj tożsamości opartej na indeksie w przypadku zmiennych danych, ograniczaj rozgałęzienia zmieniające tożsamość i unikaj AnyView, gdy można użyć konkretnego typu.

Często zadawane pytania

Czy lekcja „Zrozumienie tożsamości widoków” jest bezpłatna?

Tak — pełny tekst „Zrozumienie tożsamości widoków” 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 „Zrozumienie tożsamości widoków”?

Kontrolowanie sposobu, w jaki SwiftUI porównuje i ponownie wykorzystuje widoki. Ć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 1 z 4.

Ile czasu zajmuje lekcja „Zrozumienie tożsamości widoków”?

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. Zrozumienie tożsamości widoków
  2. Minimalizowanie ponownej ewaluacji body
  3. Widoki Equatable i zakres @State
  4. Profilowanie za pomocą instrumentu SwiftUI
← Powrót do Swift Academy