0Pricing
Swift Academy · 课时

泛型函数与类型

使用类型参数(例如 )编写泛型函数和类型。了解编译器如何推断类型,并让代码保持安全且可复用。

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

为什么需要泛型

泛型让您可以编写一个适用于多种类型的函数或类型,同时保持类型安全。您将看到用于表示类型参数的 <T>,以及类型推断如何让调用变得简单。

泛型函数

泛型函数使用类型参数(<T>)。编译器会针对每次调用检查类型。

// Generic swap for any type T
func swapValues<T>(_ a: inout T, _ b: inout T) {
    let temp = a
    a = b
    b = temp
}

var x = 1, y = 2
swapValues(&x, &y)
print(x, y)  // 2 1

var s1 = "A", s2 = "B"
swapValues(&s1, &s2)
print(s1, s2) // B A

泛型类型

类型也可以是泛型的:声明 Stack<Element>,即可将其用于整数、字符串等类型。

// A minimal generic stack
struct Stack<Element> {
    private var items: [Element] = []
    mutating func push(_ x: Element) { items.append(x) }
    mutating func pop() -> Element? { items.popLast() }
    var top: Element? { items.last }
}

var intStack = Stack<Int>()
intStack.push(10); intStack.push(20)
print(intStack.top ?? -1)   // 20

var textStack = Stack<String>()
textStack.push("hi"); textStack.push("bye")
print(textStack.pop() ?? "?")

类型推断

Swift 经常会推断泛型类型,因此调用时很少需要显式指定它们。

// The compiler infers T from arguments/assignments
func makePair<T>(_ a: T, _ b: T) -> (T, T) { (a, b) }

let pair1 = makePair(1, 2)          // T inferred as Int
let pair2 = makePair("a", "b")      // T inferred as String
print(pair1, pair2)

避免重复

如果不使用泛型,您需要为每种类型重复编写代码。泛型可以在保留静态检查的同时消除重复。

// Non-generic overloads would duplicate logic:
func eqInt(_ a: Int, _ b: Int) -> Bool { a == b }
func eqStr(_ a: String, _ b: String) -> Bool { a == b }
// A single generic can replace both:

说明与命名

说明:

  • 使用清晰的名称:T、Element,或特定于领域的名称。
  • 让 API 保持简洁并专注于核心职责。
  • 下一步:在需要时使用 where 添加约束,限制 T。

&lt;T&gt; 的含义

快速检查:<T> 在泛型函数中表示什么?

回顾

回顾:使用 <T> 定义泛型函数,并构建像 Stack<Element> 这样的泛型类型。Swift 会在调用时推断类型,让代码兼具可复用性和安全性。

常见问题解答

「泛型函数与类型」课时是免费的吗?

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

「泛型函数与类型」这节课中我会学到什么?

使用类型参数(例如 )编写泛型函数和类型。了解编译器如何推断类型,并让代码保持安全且可复用。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

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

「泛型函数与类型」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 泛型函数与类型
  2. 约束(where)与类型推断
  3. 集合上的泛型算法
← 返回 Swift Academy