默认参数与可变参数
设置默认值,并接受数量可变的参数
默认参数与可变参数 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。
欢迎
默认参数值允许调用者省略不需要定制的参数。可变参数可以接受任意数量的参数。二者都能减少样板代码并改进应用程序接口。
默认参数值
```swift
func log(_ message: String, level: String = "INFO") {
print("[\(level)] \(message)")
}
log("Server started") // [INFO] Server started
log("Disk full", level: "ERROR") // [ERROR] Disk full
```
默认值必须放在必需参数之后。
多个默认值
```swift
func connect(host: String, port: Int = 443, useTLS: Bool = true) {}
connect(host: "api.example.com")
connect(host: "api.example.com", port: 8080)
connect(host: "api.example.com", port: 80, useTLS: false)
```
调用者可以覆盖任意一部分具有默认值的参数。
可变参数
可变参数可以接受同一类型的零个或多个值:
```swift
func sum(_ numbers: Int...) -> Int {
numbers.reduce(0, +)
}
print(sum(1, 2, 3)) // 6
print(sum(10, 20, 30, 40)) // 100
```
在函数内部,`numbers` 是一个 `[Int]` 数组。
每个函数只能有一个可变参数
Swift 只允许每个函数有一个可变参数(自 Swift 5.4 起不必位于最后):
```swift
func format(_ template: String, args: String...) -> String {
var result = template
for arg in args { result = result.replacingOccurrences(of: "%s", with: arg) }
return result
}
```
结合默认值和可变参数
```swift
func build(separator: String = ", ", _ items: String...) -> String {
items.joined(separator: separator)
}
build("apple", "banana", "cherry") // "apple, banana, cherry"
build(separator: " | ", "one", "two", "three") // "one | two | three"
```
将数组传递给可变参数
不能直接将数组传递给可变参数:
```swift
let nums = [1, 2, 3]
// sum(nums) ❌ — won't compile
```
使用 `...` 解包(Swift 5.4+ 不内置序列展开;请自行使用归约或展开):
```swift
let total = nums.reduce(0, +)
```
默认闭包
默认值同样适用于闭包参数:
```swift
func retry(count: Int = 3, action: () -> Bool) {}
retry { fetchData() } // count defaults to 3
retry(count: 5) { fetchData() }
```
使用默认值时,尾随闭包语法仍然适用。
记录默认值
请清楚地注释默认值或为其命名,让调用者知道应有的行为:
```swift
/// Sends a request. Timeout defaults to 30 seconds.
func send(request: URLRequest, timeout: TimeInterval = 30.0) {}
```
良好的文档可以避免调用者显式提供默认值。
现实世界模式:类似 print 的应用程序接口
Swift 的标准 `print` 本身就是一个带默认值的可变参数函数:
```swift
// Simplified signature:
func print(_ items: Any..., separator: String = " ", terminator: String = "\n")
print("a", "b", "c") // a b c
print("x", "y", separator: "-") // x-y
print("no newline", terminator: "")
```
快速检查
在函数内部,可变参数 `Int...` 的类型是什么?
回顾
要点回顾:
• 默认值使参数在调用位置成为可选参数
• 默认值必须放在必需参数之后
• 可变参数(`Type...`)接受零个或多个值,在内部会变成数组
• 每个函数只能有一个可变参数
• 将二者结合起来,可以构建灵活而简洁的应用程序接口
接下来:输入输出参数和返回多个值。
常见问题解答
「默认参数与可变参数」课时是免费的吗?
是的 — 「默认参数与可变参数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。
「默认参数与可变参数」这节课中我会学到什么?
设置默认值,并接受数量可变的参数 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Swift Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「默认参数与可变参数」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Swift Academy 课中编写并运行代码吗?
能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 参数标签与参数名称
- 默认参数与可变参数
- 输入输出参数与多返回值
- 作为一等值的函数