0Pricing
Swift Academy · 课时

associatedtype 与泛型协议

使用 associatedtype 定义协议,了解遵循协议的类型如何绑定它们,并使用带协议约束的泛型函数。

associatedtype 与泛型协议 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 3 节课。

为什么需要关联类型

协议可以通过关联类型实现泛型化。遵循协议的类型会将占位符绑定到具体类型。

带关联类型的协议

关联类型 Item 的作用类似于类型参数。要求可以在方法、下标和属性中使用它。

protocol Container {
    associatedtype Item
    mutating func append(_ item: Item)
    var count: Int { get }
    subscript(index: Int) -> Item { get }
}

具体类型遵循协议

遵循协议的类型会通过使用该类型实现要求,选择一个具体的Item(此处为整数)。

struct IntStack: Container {
    // Binds Item == Int implicitly by usage
    private var items: [Int] = []
    mutating func append(_ item: Int) { items.append(item) }
    var count: Int { items.count }
    subscript(index: Int) -> Int { items[index] }
}
var st = IntStack()
st.append(10); st.append(20)
print(st.count, st[1])

泛型遵循者

泛型类型可以通过绑定 Item == Element 来遵循协议,同时保持协议的泛型性和可复用性。

struct Stack<Element>: Container {
    private var items: [Element] = []
    mutating func append(_ item: Element) { items.append(item) }
    var count: Int { items.count }
    subscript(index: Int) -> Element { items[index] }
    // Here, associatedtype Item == Element
}
var s = Stack<String>()
s.append("hi"); s.append("bye")
print(s.count, s[1])

在泛型中使用协议

使用 C: Container 约束函数。您可以抽象地使用 C.Item,而不必固定其具体类型。

// Generic algorithm operating on any Container
func dumpFirstTwo<C: Container>(_ c: C) {
    // We can talk about C.Item but not assume concrete type
    if c.count >= 2 {
        print("0:", c[0])
        print("1:", c[1])
    } else {
        print("too few elements")
    }
}
dumpFirstTwo(s)    // works with Stack<String>
dumpFirstTwo(st)   // works with IntStack

说明与提示

说明:

  • 带关联类型的协议不能直接用作类型;请优先使用泛型或类型擦除。
  • 清晰地命名占位符(Item、Element)。
  • 遵循关系可以显式声明(typealias Item = ...),也可以根据签名推断出来。

关联类型的含义

快速检查:associatedtype 表示什么?

回顾

回顾:使用关联类型让协议具备泛型性。遵循协议的类型会选择具体类型,而泛型函数可以通过约束处理任何遵循该协议的类型。

常见问题解答

「associatedtype 与泛型协议」课时是免费的吗?

是的 — 「associatedtype 与泛型协议」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 3 节课。

「associatedtype 与泛型协议」这节课中我会学到什么?

使用 associatedtype 定义协议,了解遵循协议的类型如何绑定它们,并使用带协议约束的泛型函数。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。

「associatedtype 与泛型协议」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. associatedtype 与泛型协议
  2. 类型擦除模式(AnySequence/AnyIterator)
  3. 何时使用存在类型(any P)与泛型
← 返回 Swift Academy