泛型 Generics
泛型函数/类型、where 子句约束、关联类型 associatedtype、Opaque 类型 some
泛型 Generics
Swift 泛型类型安全、编译期单态化。where 子句约束,associatedtype 关联类型,some 不透明返回类型。
学完本章你将: 掌握泛型函数/类型、where 约束、associatedtype、some。
泛型函数
swift
func swap<T>(_ a: inout T, _ b: inout T) {
let temp = a
a = b
b = temp
}
var x = 10, y = 20
swap(&x, &y) // x=20, y=10
var a = "Hello", b = "World"
swap(&a, &b)
泛型类型
swift
struct Stack<Element> {
private var items = [Element]()
mutating func push(_ item: Element) { items.append(item) }
mutating func pop() -> Element? { items.popLast() }
}
var intStack = Stack<Int>()
intStack.push(1)
var stringStack = Stack<String>()
stringStack.push("Hello")
associatedtype
swift
protocol Repository {
associatedtype Item
func getAll() -> [Item]
func get(by id: String) -> Item?
}
struct UserRepository: Repository {
typealias Item = User // 可省略(自动推导)
func getAll() -> [User] { /* ... */ }
func get(by id: String) -> User? { /* ... */ }
}
some —— 不透明返回类型
swift
// some 隐藏具体类型——调用者只知道"它是某个遵守协议的类型"
func createView() -> some View {
Text("Hello") // 返回类型不暴露
}
// 不同于协议类型(有性能损失)
// func createView() -> View { } // 存在容器——有性能开销