Swift Associated Types详解

关联类型(Associated Types)是Swift中的一个高级协议特性,可以更灵活地定义协议中的占位类型。

协议关联类型

定义协议时,可以将类型标注为关联类型:

protocol Container {
  associatedtype Item
  var count: Int { get }
  subscript(i: Int) -> Item { get }
}

这里Item就是一个关联类型。

遵循协议使用关联类型

在遵循协议时使用真实类型替代关联类型:

class IntStack: Container {
  // 使用Int作为Item类型
  typealias Item = Int 
  var items = [Int]()

  var count: Int {
    return items.count
  }

  subscript(i: Int) -> Int {
    return items[i]
  }
}

使用typealias为关联类型设定别名。

泛型约束

可以用关联类型为泛型添加约束:

func sum<C: Container>(of container: C) -> C.Item 
  where C.Item: Numeric {

  // 求和操作
  // 返回Numeric类型的总和
}

Item被约束为Numeric类型。

总结

关联类型增强了Swift中协议的表达力,使类型之间的约束更加精细化。理解关联类型有助于编写类型安全、易复用的协议和泛型代码。