Swift Academy · Lekcja

Projektowanie API z semantyką wartości

Wybór między struct a class podczas projektowania publicznych interfejsów i frameworków.

Lekcja 4 z 412 kroki

Projektowanie API z semantyką wartoś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.

Wprowadzenie

Projektowanie API w oparciu o semantykę wartości prowadzi do powstania przewidywalnego, bezpiecznego dla wątków i łatwego w testowaniu kodu. Przyjrzyjmy się zasadom i wzorcom, które pomagają podjąć tę decyzję.

Kontrakt semantyki wartości

Typ ma semantykę wartości, jeśli: • Dwie niezależne kopie pozostają niezależne przez cały czas • Zmiana jednej kopii nigdy nie wpływa na drugą • Typ zachowuje się jak `Int` — `a = b; a += 1` pozostawia `b` bez zmian

Publiczne API: preferuj typy wartości zwracanych

```swift // Reference semantics — caller shares state: func getUser() -> UserClass { ... } // Value semantics — caller gets independent copy: func getUser() -> UserStruct { ... } ``` Typy wartości zwracanych chronią wewnętrzny stan przed zewnętrznymi zmianami.

Niezmienne typy referencyjne

Gdy klasa jest zawsze niezmienna, zachowuje się podobnie do typu wartości: ```swift final class Token { let value: String init(_ v: String) { value = v } // No mutable state — safe to share freely } ```

Lista kontrolna: wybór struktury zamiast klasy

Preferuj strukturę, gdy: ✓ Typ modeluje dane, a nie tożsamość ✓ Dziedziczenie nie jest potrzebne ✓ Instancje nie powinny być współdzielone ani aliasowane ✓ Typ może być `Equatable` dzięki porównywaniu wartości pól ✓ Dobrze współpracuje ze Swift Concurrency (`Sendable`)

Sendable a semantyka wartości

Swift 6 Concurrency wymaga, aby typy przekraczające granice aktorów były `Sendable`: ```swift struct Message: Sendable { var text: String; var timestamp: Date } // Safe to pass between actors ``` Typy wartości, których wszystkie właściwości są `Sendable`, automatycznie spełniają `Sendable`.

Zapewnianie bezpieczeństwa wartości w API klas

```swift struct Config { // Expose value snapshot instead of the class: func snapshot() -> Config { self } // copy by value semantics } // Or use a value-type DTO: struct UserDTO: Sendable { var id: UUID; var name: String } ```

Wzorzec Builder z typami wartości

```swift struct Request { var url: URL var method: String = "GET" var headers: [String:String] = [:] func adding(header: String, value: String) -> Request { var copy = self copy.headers[header] = value return copy } } let r = Request(url: url).adding(header: "Auth", value: "Bearer x") ```

Sygnał w dokumentacji API

Wybór struktury zamiast klasy wysyła użytkownikom API jasny sygnał: • „To są dane — można je swobodnie kopiować” • „Zmiana kopii nie wpłynie na oryginał” • „Ten typ można bezpiecznie przekazywać między wątkami” Zmniejsza to potrzebę tworzenia kopii ochronnych w kodzie korzystającym z API.

Kiedy zaakceptować semantykę referencji

Zaakceptuj semantykę klas/referencji, gdy: • Tożsamość ma znaczenie (`===`): dwa obiekty `User` mogą reprezentować tę samą osobę • Współdzielony zmienny stan jest funkcją: `Database`, `Cache`, `AudioEngine` • Potrzebna jest współpraca z ObjC: typy UIKit i AppKit są klasami • Potrzebne są wywołania zwrotne cyklu życia: `deinit` do czyszczenia zasobów

Szybkie sprawdzenie

Które słowo kluczowe Swift oznacza typ jako bezpieczny do przekazywania przez granice aktorów w Swift Concurrency?

Podsumowanie

Najważniejsze informacje: • Semantyka wartości: zmiany są lokalne, bez aliasingu • Preferuj strukturę dla modeli danych, a klasę dla tożsamości i cyklu życia • Niezmienne klasy zachowują się jak typy wartości • `Sendable` + typy wartości = bezpieczna współbieżność • Wzorzec Builder wykorzystujący kopie struktur tworzy przejrzyste, niezmienne API Kurs ukończony! Dalej: ARC i wzorce zarządzania pamięcią.
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 „Projektowanie API z semantyką wartości” jest bezpłatna?

Tak — pełny tekst „Projektowanie API z semantyką wartoś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 „Projektowanie API z semantyką wartości”?

Wybór między struct a class podczas projektowania publicznych interfejsów i frameworków. Ć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 „Projektowanie API z semantyką wartoś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. Stos a sterta: gdzie przechowywane są wartości
  2. Mutowanie, współdzielenie i nieoczekiwane aliasowanie
  3. Mieszane grafy wartości i odwołań
  4. Projektowanie API z semantyką wartości
← Powrót do Swift Academy