Copy // type of property
// -------------------------------
var a: View = Text ( "Hello" ) // ⛔:`View` has associatedtype 'Body`
var b: some View = Text ( "Hello" ) // ✅ opaque type
var c: any View = Text ( "Hello" ) // ✅ existential type
Copy // return type (of computed property)
// -------------------------------------
let n = Int . random ( in : 1 ... 5 )
// ✅ OK (same type, homogeneous)
var a: some View {
if n % 2 == 0 { Text ( "Even" ) }
else { Text ( "Odd" ) }
}
// ⛔ NG! (Text ≠ Label)
var b: some View {
if n % 2 == 0 { Text ( "Even" ) }
else { Label ( "Hello" , systemImage : "bolt.fill" ) }
}
// ✅ OK (heterogeneous, implicit type erasure)
var c: any View {
if n % 2 == 0 { Text ( "Even" ) }
else { Label ( "Hello" , systemImage : "bolt.fill" ) }
}
Copy // homogeneous vs heterogeneous collection
var a: [some Shape] = [Circle(), Circle()] // ✅ OK (homogeneous)
var a: [some Shape] = [Circle(), Capsule()] // ⛔ NG! (Circle ≠ Capsule)
var a: [any Shape] = [Circle(), Capsule()] // ✅ OK (heterogeneous)