泛型类型

优质
小牛编辑
138浏览
2023-12-01

泛型类型

  • 除了反省函数, Swift允许你定义自己的泛型类型. 它们是可以用于任意类型的自定义类、结构体、枚举, 和ArrayDictionary方式类型.

1. 定义泛型类型

InStack.png

  • 定义一个普通的结构体
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]
    }
}