⚖️some╱any╱generics
╱🚧 under construction -> homogeneous type, heterogeneous type
Swift ⟩ type ⟩ category ⟩ some╱any╱generics
範例
// implementer
func f() -> some Shape {
Circle()
}
// user
let a = f()// implementer
func g() -> any Shape {
// omitted ...
}
// user
let b = g()// implementer
struct Container<T> {
var value: T
}
// user
let c = Container(value: 42)型別決定期
⚙️ 編譯期
🏎️ 執行期
⚙️ 編譯期
👉 roles:不同角色(實現者、使用者)對型別的不同控制權
// 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👉 associated type 👉 some (opaque type)
// 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") }
}// 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)Swift ⟩
Types ⟩
Opaque Types (some)
Boxed Protocol Types (any)
existential type
homogeneous type
heterogeneous type
🔰 roles:不同(程式碼)角色對型別有不同的控制權。
ChatGPT ⟩ 學習 Swift ⭐️
Bakshi ⟩ some and any keyword in Swift ⭐️
SwiftSenpai ⟩ Understanding the “some” and “any” keywords in Swift 5.7
Last updated
Was this helpful?