func printValue(content :String){
print(content)
}
func sayHello(name :String) ->String{
return "hello,\(name)"
}
//依次调用上面的两个函数
printValue("hello,world")
sayHello("kite")
参数和返回值
定义一个函数是以func
开头,然后是函数名,后面的括号内是参数列表,多个参数之间用英文的逗号隔开。如果函数有返回值,则将返回值的类型写在一个箭头(->)的后面。
外部参数
外部参数是在调用该函数时需要明确给出的参数名,这样做可以提高代码的可读性。定义外部参数的方式是将外部参数名写在形参的前面,用空格隔开。
func sayHello( toName name :String) ->String{
return "hello,\(name)"
}
sayHello(toName: "kite")
此时调用sayHello时,需要制定外部参数名。
如果一个函数不止一个参数的话,swift默认会将第二个以及后面的所有参数的形参指定为外部参数名,例如
func add(num1 :Int,num2 :Int) ->Int{
return num1+num2
}
add(1,num2: 2)
func add(num1 :Int,num2 :Int,num3 :Int) ->Int{
return num1+num2+num3
}
add(1,num2: 2,num3: 3)
如果你不喜欢这种默认的外部参数,也可以在形参前面加上一个下划线,中间用空格隔开,这样就告诉swift我这个参数不需要默认的外部参数。
func add(num1 :Int,_ num2 :Int,_ num3 :Int) ->Int{
return num1+num2+num3
}
add(1,2,3)
参数默认值
swift允许为函数的参数设置默认值,这样的话,调用该函数时可以不提供该参数。设置默认值的方法是在参数的类型后面加上等号并加上默认值。
func sayHello(toName name :String,greetingContent content :String = "hello") ->String{
return content+","+name
}
print(sayHello(toName: "kite"))
print(sayHello(toName: "kite",greetingContent: "hi"))
hello,kite hi,kite
可变形参
一个可变形参可以接受0个或多个输入作为函数的参数。传递至可变形参的值在函数主体内是以适当类型的数组存在的。
func add(numbers :Int...) -> Int{
var total = 0
for item in numbers{
total+=item
}
return total
} //参数的数量可以是0个到多个
add()
add(1,3)
add(1,3,4,5)
inout参数
正常情况下,当一个值类型的变量被作为形参传递给一个函数时,无论该变量在函数体内如何被复制,这个变量原来的值是不受影响的。如果你希望这个形参的值能够保留,则可以将其定义为inout参数,在形参前面加上inout关键字即可。下面定义一个交换值的函数,参数传递进去之后,形参的变化将被保留。
func swapTwoInts(inout a: Int,inout b: Int) {
let temporaryA = a
a=b
b = temporaryA
}
var a=1,b=2
swap(&a,&b)
print("a=\(a),b=\(b)")
a=2,b=1
注意,调用含有inout参数的函数时,inout参数的前面要加上&符号。
函数类型
函数是有类型的!既然有类型,就能够声明该类型的变量和常量。例如
func sayHello(name :String) ->String{
return "hello,\(name)"
}
func sayHi(name :String) ->String{
return "hi,\(name)"
}
这两个函数的类型都是为(String)->(String)
函数类型也像一般类型一样,可以声明常量和变量。先声明两个函数
var myFunc :(String)->(String) = sayHello
print(myFunc("kite"))
myFunc=sayHi
print(myFunc("kite"))
上面代码中的myFunc就是(String)->(String)
类型的函数变量,函数的变量也可以像函数一样调用。函数类型也同样支持类型推测,所以,在声明myFunc时如果直接赋值的话,也可以不指定类型如下:
var myFunc = sayHello