Swift Academy · Lektion

Utforma API:er med värdesemantik

Välj mellan struct och class när Ni utformar offentliga gränssnitt och ramverk.

Lektion 4 av 412 steg

Utforma API:er med värdesemantik är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.

Välkommen

Att utforma API:er kring värdesemantik leder till förutsägbar, trådsäker och lätttestad kod. Här går vi igenom principerna och mönstren för att göra det valet.

Kontraktet för värdesemantik

En typ har värdesemantik om: • Två oberoende kopior förblir oberoende • Ändringar i den ena kopian aldrig påverkar den andra • Typen beter sig som `Int` – `a = b; a += 1` lämnar `b` oförändrad

Offentligt API: föredra värdetyper som returtyper

```swift // Reference semantics — caller shares state: func getUser() -> UserClass { ... } // Value semantics — caller gets independent copy: func getUser() -> UserStruct { ... } ``` Returtyper med värdesemantik skyddar internt tillstånd från extern ändring.

Oföränderliga referenstyper

När en klass alltid är oföränderlig beter den sig som en värdetyp: ```swift final class Token { let value: String init(_ v: String) { value = v } // No mutable state — safe to share freely } ```

Checklista: välj struct framför class

Föredra struct när: ✓ Typen representerar data, inte identitet ✓ Det inte finns något behov av arv ✓ Instanser inte bör delas eller aliaseras ✓ Den kan jämföras med Equatable genom att fältvärden jämförs ✓ Den fungerar väl med Swift Concurrency (Sendable)

Sendable och värdesemantik

Swift 6 Concurrency kräver att typer som passerar aktörsgränser är `Sendable`: ```swift struct Message: Sendable { var text: String; var timestamp: Date } // Safe to pass between actors ``` Värdetyper där alla egenskaper är Sendable blir automatiskt `Sendable`.

Gör klass-API:er säkra för värdesemantik

```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 } ```

Builder-mönstret med värdetyper

```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") ```

Signal i API-dokumentationen

Att välja struct framför class skickar en tydlig signal till API-användare: • ”Detta är data – kopiera den fritt” • ”Ändringar i er kopia påverkar inte min” • ”Den här typen är trådsäker att skicka runt” Det minskar behovet av defensiv kopiering i konsumentkod.

När referenssemantik är rätt val

Acceptera klass- eller referenssemantik när: • Identitet spelar roll (`===`): två `User`-objekt kan representera samma person • Delat föränderligt tillstånd är själva funktionen: `Database`, `Cache`, `AudioEngine` • ObjC-kompatibilitet krävs: UIKit- och AppKit-typer är klasser • Livscykelåterkoppling behövs: `deinit` för resursrensning

Snabb kontroll

Vilket Swift-nyckelord markerar en typ som säker att skicka över aktörsgränser i Swift Concurrency?

Sammanfattning

Viktiga slutsatser: • Värdesemantik: ändringar är lokala, ingen aliasing • Föredra struct för datamodeller och class för identitet eller livscykel • Oföränderliga klasser beter sig som värdetyper • `Sendable` + värdetyper = säker samtidighet • Builder-mönstret med struct-kopior skapar rena oföränderliga API:er Kursen är klar! Nästa: ARC och mönster för minneshantering.
Gratis att börja

Lär dig Swift med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
122
Lektioner
409

Vanliga frågor

Är lektionen ”Utforma API:er med värdesemantik” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Utforma API:er med värdesemantik”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Utforma API:er med värdesemantik”?

Välj mellan struct och class när Ni utformar offentliga gränssnitt och ramverk. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Swift Academy?

Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Utforma API:er med värdesemantik”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Swift Academy-lektionen?

Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Stack kontra heap: var värden lagras
  2. Mutering, delning och oväntad aliasing
  3. Blandade värde- och referensgrafer
  4. Utforma API:er med värdesemantik
← Tillbaka till Swift Academy