1、无返回值的函数
func test(name: String){ print(name) }
test(name: "哈哈")
2、有返回值的函数
func test2(name: String)-> Bool { return true }
let isName = test2(name: "哈哈")
print(isName)
3、隐式返回 (如果整个函数体是一个单一表达式,那么函数会隐式返回这个表达式)
func sum1(a: Int, b: Int) -> Int{ a + b }
4、返回元组:实现多返回值
//例 1
func calulate (v1: Int ,v2: Int) -> (sum: Int , difference: Int ){
return( v1 + v2 ,v1 - v2)
}
let res = calulate(v1: 30, v2: 15)
print(res.sum,res.difference)
//例 2
func exchange (v1: Int ,v2: Int) -> (Int ,Int){
return (v2 ,v1)
}
let ex = exchange(v1: 30, v2: 35)
print(ex.0,ex.1)
5、参数标签 ( 可以添加标签,可以使用下划线_省略标签)
// at 为添加的标签
func gotoWork(at time: String){ print(time) }
//调用
gotoWork(at: "早上9点")
//省略标签
func sum(_ a: Int ,_ b:Int) -> Int { return a + b }
//此处没有显示变量名称
sum(20, 50)
6、可变参数
a:一个函数最多只能有一个可变参数
b:紧跟在可变参数后面的参数不能省略标签
// 例 1
func sum(numbers:Int...) -> Int {
var total = 0
for nu in numbers {
total += nu
}
return total
}
let res = sum(numbers: 35,5,7,9)
print(res)
//例2 参数 name 标签不能省略
func test(_ numbers: Int... ,name: String ,_ age: Int){ }
test(3,35,5,8, name: "哈哈", 60)
7、输入输出参数 (inout)(可以在函数内部修改外部的值)
a:可变参数不能标记为 inout b:inout 不能为默认值 c: inout 参数只能传入可以被多次赋值的 d:inout 参数的本质是地址传递(引用传递)
func add(age: inout Int){ age += 1;}
var age = 20
add(age: &age)
print(age)//21
//值交换
func swapValues(_ a: inout Int , _ b: inout Int){
(a , b) = (b ,a)
}
var a = 20
var b = 10
swapValues(&a, &b)
print(a,b) // 10 20
8、默认值 (参数可以有默认值)
a:C++的默认参数值有个限制 : 必须从右往左设置。由于Swift拥有参数标签,因此并没有此类限制
b:但是在省略参数标签时,需要特别注意,避免出错。
func check(name: String = "哈哈" ,age: Int ,job: String = "none"){
print(name,age,job)
}
check(age: 10)
check(name: "呵呵", age: 24)
check(age: 30, job: "程序员")
结果
哈哈 10 none
呵呵 24 none
哈哈 30 程序员
//此次 middle 不能省略
func test(_ first: Int = 10 ,middle: Int , _ last: Int = 30){ }
Swift 自带的的print 函数
public func print(_ items: Any..., separator: String = " ", terminator: String = "\n")