Valg mellem some, any og generics
Vælg generics til homogen statisk typning, some P til at skjule en fast konkret type og any P til heterogen polymorfi.
Valg mellem some, any og generics er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 3 af 3. 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 3 lektioner i alt.
Hvornår skal du bruge hvad?
Tommelfingerregel:
- Generiske typer: samme konkrete type for hvert kald; bedst kontrol ved kompilering og bedst ydeevne.
- some P: skjul den konkrete returtype, som er fast for hver funktion.
- any P: bland typer, der opfylder protokollen (heterogent), med dynamiske metodekald.
Generiske typer: homogene
Generiske typer er ideelle til homogene data og optimering (statiske metodekald og indlejring).
protocol Shape { func area() -> Double }
struct Circle: Shape { let r: Double; func area() -> Double { .pi * r * r } }
struct Square: Shape { let s: Double; func area() -> Double { s * s } }
// Generic: one concrete Shape type per call site (homogeneous)
func totalAreaGeneric<S: Sequence, T: Shape>(_ xs: S) -> Double where S.Element == T {
xs.reduce(0) { $0 + $1.area() }
}
print(totalAreaGeneric([Circle(r:1), Circle(r:2)])) // OK
// totalAreaGeneric([Circle(r:1), Square(s:2)]) // ❌ different typesUigennemsigtig: skjult, men fast
some P returnerer en fast, men skjult type. Det er velegnet, når du vil have indkapsling uden at miste statisk ydeevne.
// Opaque factory hides the concrete type while guaranteeing Shape
func unitShape(flag: Bool) -> some Shape {
// Must return the SAME underlying type on all paths; pick one.
Circle(r: 1)
}
let s = unitShape(flag: true)
print(String(format: "%.2f", s.area())) // 3.14any P: heterogen
any P tillader blandede typer i én samling eller variabel; metoder vælger dynamisk via protokolgrænsefladen.
// Existential: store mixed conformers
let mixed: [any Shape] = [Circle(r: 1), Square(s: 2)]
let sum = mixed.reduce(0) { $0 + $1.area() } // dynamic dispatch
print(String(format: "%.2f", sum))Sammenligning af API-former
Vælg grænsefladen:
- Generisk: Den kaldende kode styrer den konkrete type.
- Uigennemsigtig: Du skjuler typen, som er fast for hver funktion.
- Eksistentiel: Du kan variere konkrete typer dynamisk.
// Three API shapes for the same idea: "make a Shape"
// 1) Generic return — exposes concrete type to caller
func makeGeneric<T: Shape>(_ t: T) -> T { t }
// 2) Opaque return — hides concrete type but fixed
func makeOpaqueCircle() -> some Shape { Circle(r: 1) }
// 3) Existential return — can return any conformer
func makeExistential(_ big: Bool) -> any Shape { big ? Square(s: 3) : Circle(r: 1) }
let g: Circle = makeGeneric(Circle(r: 2)) // caller knows concrete type
let o = makeOpaqueCircle() // caller sees only Shape
let e = makeExistential(true) // could be Circle or Square at runtime
print(g.area(), o.area(), e.area())Huskeark
Retningslinjer:
- Foretræk generiske typer for ydeevne og stærk typning, når dataene er homogene.
- Brug some P til at skjule returtyper og holde API'er stabile.
- Brug any P til plugin-lignende eller blandede samlinger.
- Undgå any P for protokoller med associerede typer/Self, medmindre du bruger typeudviskning.
Beslutningstjek: vælg some/any/generiske typer
Hurtigt tjek: Hvilken mulighed skjuler en fast konkret returtype bag protokollen P?
Opsummering
Opsummering:
- Generiske typer = homogene, hurtigst og mest statiske.
- some P = skjul den konkrete type, som er fast for hver funktion.
- any P = heterogen og med dynamiske metodekald.
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 “Valg mellem some, any og generics” gratis?
Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “Valg mellem some, any og generics”, 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 3 lektioner i alt.
Hvad lærer jeg i “Valg mellem some, any og generics”?
Vælg generics til homogen statisk typning, some P til at skjule en fast konkret type og any P til heterogen polymorfi. 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 3 af 3.
Hvor lang tid tager lektionen “Valg mellem some, any og generics”?
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
- some P (uigennemsigtige resultattype): skjul konkrete typer
- any P (eksistentiel): afvejninger og dynamisk dispatch
- Valg mellem some, any og generics