泛型类型
优质
小牛编辑
138浏览
2023-12-01
泛型类型
- 除了反省函数,
Swift
允许你定义自己的泛型类型. 它们是可以用于任意类型的自定义类、结构体、枚举, 和Array
、Dictionary
方式类型.
1. 定义泛型类型
- 定义一个普通的结构体
struct IntStack {
var items = [Int]()
mutating func push(_ item: Int) {
items.append(item)
}
mutating func pop() -> Int {
items.removeLast()
}
}
- 泛型结构体
struct Stack<Element> {
var items = [Element]()
mutating func push(_ item: Element) {
items.append(item)
}
mutating func pop() -> Element {
items.removeLast()
}
}
var stackOfStrings = Stack<String>()
var stackOfInts = Stack<Int>()
2. 扩展泛型类型
- 当你扩展一个泛型类型时, 不需要在扩展的定义中提供类型形式参数列表. 原始类型定义的类型形式参数列表在扩展体里仍然有效, 并且原始类型形式参数列表名称也用于扩展类型形式参数.
struct Stack<Element> {
var items = [Element]()
mutating func push(_ item: Element) {
items.append(item)
}
mutating func pop() -> Element {
items.removeLast()
}
}
// 而不是写成extension Stack<Element>
// 并且泛型类型Element是可直接使用的
extension Stack {
var topItem: Element? {
return items.isEmpty ? nil : items[items.count - 1]
}
}