泛型函数与类型
使用类型参数(例如 )编写泛型函数和类型。了解编译器如何推断类型,并让代码保持安全且可复用。
泛型函数与类型 是 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。
<T> 的含义
快速检查:<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 反馈 — 无需本地设置。
此课程中的所有课时
- 泛型函数与类型
- 约束(where)与类型推断
- 集合上的泛型算法