Opaque-typer med nyckelordet some
Returnera opaque-typer från funktioner för att bevara typidentiteten utan att exponera den.
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 matchsome 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() } // existentialsome 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 . 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.
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
- Generiska begränsningar och where-satser
- Opaque-typer med nyckelordet some
- Existentialtyper med any och typeliminering
- Primära associerade typer och typade throws