Swift Academy · Lektion

Opaque-typer med nøgleordet some

Returnér opaque-typer fra funktioner for at bevare typeidentiteten uden at eksponere den.

Lektion 2 af 413 trin

Opaque-typer med nøgleordet some er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Swift Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Swift Academy-kurset indeholder 4 lektioner i alt.

Problemet, som uigennemsigtige typer løser

Når du returnerer en protokoltype med any, mister du typeoplysninger. some bevarer dem, samtidig med at implementeringen skjules.

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

Returnering af some Protocol

some Shape som returtype fortæller den kaldende kode: "Jeg returnerer en bestemt Shape-type" uden at afsløre hvilken.

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

Typeidentiteten bevares

Fordi some-typer har en fast underliggende type, tillader compileren operationer, der 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 er uigennemsigtig med én fast type, mens any er eksistentiel og kan repræsentere enhver type, der overholder protokollen, ved kørsel.

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

some i SwiftUI Body

SwiftUI bruger some View, så hver views body returnerer én ensartet type uden at afsløre layoutets interne detaljer.

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

Uigennemsigtige parametre med some

Swift 5.7+ tillader some Protocol på parameterpositioner som syntaktisk sukker for generiske begrænsninger.

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

Omvendt generisk notation

En uigennemsigtig parameter some P svarer til (_ value: T). Compileren udleder T på kaldestedet.

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

Begrænsninger for some

Du kan sammensætte protokoller med uigennemsigtige typer på samme måde som med generiske typer.

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

Returnering af forskellige typer

I modsætning til eksistentielle typer kan du ikke returnere forskellige typer, der overholder protokollen, fra forskellige grene med uigennemsigtige typer.

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

Uigennemsigtige typer i protokoller

Protokoller med associerede typer bliver enklere at bruge som returtyper med some.

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

Hvornår skal du vælge some

Foretræk some, når du returnerer én ensartet type og vil bevare typeidentiteten. Brug any, når du har brug for heterogene samlinger.

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

Hurtigt tjek

Hvad garanterer nøgleordet some om en returtype?

Opsummering af lektionen

some opretter uigennemsigtige returtyper, der skjuler den konkrete type, samtidig med at typeidentiteten bevares. SwiftUI's some View er det klassiske eksempel. Brug some til returværdier med én type og any til heterogene samlinger.

Gratis at komme i gang

Lær Swift med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
122
Lektioner
409

Ofte stillede spørgsmål

Er lektionen “Opaque-typer med nøgleordet some” gratis?

Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “Opaque-typer med nøgleordet some”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Swift Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Opaque-typer med nøgleordet some”?

Returnér opaque-typer fra funktioner for at bevare typeidentiteten uden at eksponere den. Du øver dig i Swift Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Swift Academy?

Der kræves ingen tidligere erfaring. Swift Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Opaque-typer med nøgleordet some”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Swift Academy-lektion?

Ja. Alle Swift Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Generiske begrænsninger og where-klausuler
  2. Opaque-typer med nøgleordet some
  3. Existentials med any og typeudviskning
  4. Primære associated types og typed throws
← Tilbage til Swift Academy