Swift Academy · Lektion

Opaque-typer med nyckelordet some

Returnera opaque-typer från funktioner för att bevara typidentiteten utan att exponera den.

Lektion 2 av 413 steg

Opaque-typer med nyckelordet some är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 2 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.

Problemet som opaka typer löser

Att returnera en protokolltyp med any gör att typinformationen går förlorad. some bevarar den samtidigt som implementeringen döljs.

protocol Shape { var area: Double { get } }
struct Circle: Shape { var area: Double { .pi * 4 } }

Returnera some Protocol

some Shape som returtyp talar om för anroparen att "jag returnerar en specifik Shape-typ" utan att avslöja vilken.

func makeShape() -> some Shape {
  return Circle()
}
let s = makeShape()
print(s.area)

Typidentiteten bevaras

Eftersom some-typer har en fast underliggande typ tillåter kompilatorn operationer som kräver Self.

func makeEquatableShape() -> some Shape & Equatable {
  return Circle()
}
let a = makeEquatableShape()
let b = makeEquatableShape()
print(a == b) // works because types match

some kontra any

some är opak (en enda fast typ), medan any är existentiell (vilken typ som helst som uppfyller protokollet vid körning).

func withSome() -> some Shape { Circle() }  // opaque
func withAny() -> any Shape { Circle() }   // existential

some i SwiftUI:s body

SwiftUI använder some View så att body för varje vy returnerar en enda konsekvent typ utan att avslöja layoutens interna detaljer.

struct ContentView: View {
  var body: some View {
    Text("Hello, World!")
  }
}

Opaka parametrar med some

Swift 5.7+ tillåter some Protocol på parameterpositioner som syntaktiskt socker för generiska begränsningar.

func printArea(_ shape: some Shape) {
  print(shape.area)
}
printArea(Circle())

Omvända generics

En opak parameter some P motsvarar (_ value: T). Kompilatorn härleder T vid anropet.

func doubled(_ value: some Numeric) -> some Numeric {
  value * 2
}

Begränsningar för some

Du kan kombinera protokoll med opaka typer precis som med generics.

func process(_ item: some Codable & Hashable) {
  let hash = item.hashValue
  print(hash)
}

Returnera olika typer

Till skillnad från existentiella typer kan du inte returnera olika typer som uppfyller protokollet från olika grenar med opaka typer.

// This would NOT compile:
// func shape(_ big: Bool) -> some Shape {
//   big ? Circle() : Square()  // ERROR: different types
// }

Opaka typer i protokoll

Protokoll med associerade typer blir enklare att använda som returtyper med some.

protocol Buildable { associatedtype Output; func build() -> Output }
func build(_ b: some Buildable) -> some Any {
  b.build()
}

När ska du välja some

Föredra some när du returnerar en konsekvent typ och vill bevara typidentiteten. Använd any när du behöver heterogena samlingar.

var shapes: [any Shape] = [Circle(), Circle()]
let single: some Shape = Circle()

Snabbtest

Vad garanterar nyckelordet some om en returtyp?

Sammanfattning av lektionen

some skapar opaka returtyper som döljer den konkreta typen men bevarar typidentiteten. SwiftUI:s some View är det klassiska exemplet. Använd some för returer med en enda typ och any för heterogena samlingar.

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 ”Opaque-typer med nyckelordet some” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Opaque-typer med nyckelordet some”, 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 ”Opaque-typer med nyckelordet some”?

Returnera opaque-typer från funktioner för att bevara typidentiteten utan att exponera den. 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 2 av 4.

Hur lång tid tar lektionen ”Opaque-typer med nyckelordet some”?

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. Generiska begränsningar och where-satser
  2. Opaque-typer med nyckelordet some
  3. Existentialtyper med any och typeliminering
  4. Primära associerade typer och typade throws
← Tillbaka till Swift Academy