最简单的函数
首先定义一个简单的函数,这个函数只是输出一个固定的名字。
func printName() {
print("张三")
}
printName()
向函数传递参数
我们试着将名字定义成参数,调用者可以自己传递需要打印的名字。
func printName(name: String) {
print(name)
}
printName(name: "张三")
函数参数的两种不同名称
定义一个可以输出名字和年龄的函数。
func printNameAndAge2(name: String, age: Int) {
print("name: " + name + " age: \(age)")
}
在 Swift 中,函数的参数其实有两个名字,一个叫做argument name
,用于内部使用,一个叫做argument label
,用于外部调用。例如,定一个可以输出名字和年龄的函数。
func printNameAndAge(hisName name: String, andAge age: Int) {
print("name: " + name + " age: \(age)")
}
// 调用
printNameAndAge(hisName: "张三", andAge: 22)
很明显,参数hisName
和andAge
是argument label
,用于外部调用。为的是使函数在调用的时候,呈现更好的语义。
参数name
和age
是argument name
,用于函数内部使用。为了让函数在实现的时候,呈现更好的实现逻辑。
调用时省略函数参数
其实在平时的开发过程中,很少去这样定义函数,一般都是写一个函数外部和内部都通用的名字。例如:
func printNameAndAge(name: String, age: Int) {
print("name: " + name + " age: \(age)")
}
printNameAndAge(name: "张三", age: 22)
这时,函数的argument label
就等同于argument name
。
也可以再简化下函数,省略掉函数的argument name
,例如:
func printNameAndAge(_ name: String, _ age: Int) {
print("name: " + name + " age: \(age)")
}
printNameAndAge("张三", 22)
因为函数名字已经很清楚得表达了要打印名字和年龄,所以参数可以省略。实际开发中,参数名省略与否要根据函数名是否清晰地表达了它所需的参数来定。
设定默认值
可以为函数的参数设定默认值,我们设置默认的名字为Guest
。
func printNameAndAge(name: String = "Guest", age: Int) {
print("name: " + name + " age: \(age)")
}
调用函数时,我们可以看到 Xcode 自动为我们提供了函数的两种调用,可以不传递名字。
可变长的参数
计算所有参数的总和。
func addInt(_ numbers: Int ...) {
var sum = 0
numbers.forEach {
sum += $0
}
print(sum)
}
addInt(1, 2, 3)
inout 关键字
在 C 语言时代,我们经常把一个变量带到函数里面去,期望函数把数据加工的结果返回到这个变量里,再带出来供我们使用。例如,计算两个数相加。
func add(x: Int, y: Int, result: Int) {
result = x + y
}
很可惜,报错了,因为
result
作为参数,是属于一个常量let
。我们需要在参数类型前面加上inout
关键字,而且注意在调用的时候,为参数加上取地址符号&。不过一般是实际开发中,很少这样去用,为函数制定返回值即可,例如:
func add(x: Int, y: Int, result: Int) -> Int {
return x + y
}
网友评论