Tipi opachi con la parola chiave some
Restituire tipi opachi dalle funzioni per preservare l’identità del tipo senza esporla.
Tipi opachi con la parola chiave some è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.
Il problema risolto dai tipi opachi
Restituire un tipo di protocollo con any fa perdere le informazioni sul tipo. some le preserva nascondendo l'implementazione.
protocol Shape { var area: Double { get } }
struct Circle: Shape { var area: Double { .pi * 4 } }Restituire some Protocol
Il tipo restituito some Shape comunica al chiamante «restituisco un tipo Shape specifico» senza rivelare quale.
func makeShape() -> some Shape {
return Circle()
}
let s = makeShape()
print(s.area)L'identità del tipo viene preservata
Poiché i tipi some hanno un tipo sottostante fisso, il compilatore consente le operazioni che richiedono Self.
func makeEquatableShape() -> some Shape & Equatable {
return Circle()
}
let a = makeEquatableShape()
let b = makeEquatableShape()
print(a == b) // works because types matchsome e any
some è opaco (un unico tipo fisso), mentre any è esistenziale (un qualsiasi tipo conforme in fase di esecuzione).
func withSome() -> some Shape { Circle() } // opaque
func withAny() -> any Shape { Circle() } // existentialsome nel body di SwiftUI
SwiftUI usa some View in modo che il body di ogni view restituisca un unico tipo coerente senza esporre i dettagli interni del layout.
struct ContentView: View {
var body: some View {
Text("Hello, World!")
}
}Parametri opachi con some
Swift 5.7+ consente di usare some Protocol nelle posizioni dei parametri come zucchero sintattico per i vincoli generici.
func printArea(_ shape: some Shape) {
print(shape.area)
}
printArea(Circle())Generics al contrario
Un parametro opaco some P equivale a . Il compilatore deduce T nel punto della chiamata.
func doubled(_ value: some Numeric) -> some Numeric {
value * 2
}Vincoli su some
È possibile combinare i protocolli con i tipi opachi proprio come con i generics.
func process(_ item: some Codable & Hashable) {
let hash = item.hashValue
print(hash)
}Restituire tipi diversi
A differenza dei tipi esistenziali, con i tipi opachi non è possibile restituire tipi conformi diversi da rami diversi.
// This would NOT compile:
// func shape(_ big: Bool) -> some Shape {
// big ? Circle() : Square() // ERROR: different types
// }Tipi opachi nei protocolli
I protocolli con tipi associati diventano più semplici da usare come tipi restituiti con some.
protocol Buildable { associatedtype Output; func build() -> Output }
func build(_ b: some Buildable) -> some Any {
b.build()
}Quando scegliere some
È preferibile usare some quando si restituisce un unico tipo coerente e si vuole preservarne l'identità. Usi any quando servono raccolte eterogenee.
var shapes: [any Shape] = [Circle(), Circle()]
let single: some Shape = Circle()Verifica rapida
Che cosa garantisce la parola chiave some riguardo a un tipo restituito?
Riepilogo della lezione
some crea tipi restituiti opachi che nascondono il tipo concreto preservandone l'identità. some View di SwiftUI è l'esempio per eccellenza. Usi some per i valori restituiti di un unico tipo e any per le raccolte eterogenee.
Impara Swift con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 122
- Lezioni
- 409
Domande Frequenti
La lezione «Tipi opachi con la parola chiave some» è gratuita?
Sì — il testo completo di «Tipi opachi con la parola chiave some» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.
Cosa imparerò in «Tipi opachi con la parola chiave some»?
Restituire tipi opachi dalle funzioni per preservare l’identità del tipo senza esporla. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Swift Academy?
Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Tipi opachi con la parola chiave some»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Swift Academy?
Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Vincoli generici e clausole where
- Tipi opachi con la parola chiave some
- Existential con any e type erasure
- Associated type primari e typed throws