七、函数
func 函数名(形参列表)->(返回值类型){ }
形参类型1,形参名2: 形参类型2,. . .
func math(num: Int, num1: Int, str: String) -> Int { return num + num1 }
2、没有返回值、无参:
三种写法:1)func mathed1(age: Int, name: String) -> Void { }
2)func mathed2() -> () { } // 无参形式
3)func mathed3(age: Int, name: String) { }
一个函数可以返回元组数据
func find(id: Int) -> (name: String, age: Int) {
if id > 0 {
return ("jack", 12)
} else {
return ("None", 0)
}
}
var person = find(12)
print("he is name \(person.name), age is \(person.age)")
一般情况,通过形式参数的名字,就能推断出参数的含义和作用
func addStudent(name: String, age: Int, id: Int) { }
addStudent("jack", age: 12, id: 1024)
在函数内部一看参数名就知道参数作用,但是形式参数是用在函数内部的,当调用函数时就看不见形参的名字,有可能导致以后会不太明白每个参数的含义
定义格式: func 函数名(外部参数名 形式参数名:形参类型)->(返回值类型){ }
func addStudent(name: String, Stu_age age: Int, Stu_age id: Int) {}
addStudent("Jack", Stu_age: 12, Stu_age: 20)
⚠️一旦定义了外部参数名,在调用函数时就必须加上外部参数名
简写:使用#能简化外部参数名的定义 (新语法修改了,不再适用Swift 3)
可以在定义函数时,给形参指定一个默认值,调用函数时,就可以不用给这个形参传值 - func math(name: String, age: Int = 12) { } math("jack”) // age参数有个默认值12,调用函数时可以不传值给age参数
带有默认参数值的形参,swift会自动给他生成一个跟形参名相同的外部参数名
若要传入age参数值时:math(“jack”, age: 21)
在带有默认参数值的参数名前加下划线 _,调用函数时就不用写外部函数参数名
func math(name: String, _ age: Int = 12) { } math("jack", 23)
默认情况,函数参数都是常量参数,不能在函数内部修改
func math(let name: String) // let 可省略
可能需要在函数内部修改参数的值,这时需要定义变量参数
在参数名前加 var 即可:func math( var
func append(var string: String, suffix: String, count: Int) -> String {
for _ in 0..<count{
string += suffix
}
return string
}
在C语言中,利用指针可以在函数内部修改外部变量的值。在swift中利用输入输出参数,也可以在函数内部修改外部变量的值。
能输入一个值进来,也可以输出一个值到外部
定义:在参数名前面加个inout关键字即可 func math(inout num: Int) math(&a)
func change(inout num1: Int, inout num2: Int) -> () {
let temp = num1
num1 = num2
num2 = temp
} // 交换外部变量的两个值
var a = 20; var b = 10
change(&a, num2: &b) // 传入的参数前面必须加 &
如何在不利用第三方变量的前提下交换两个变量的值
num1 = num1 + num2 & num1 = num1^num2
num2 = num1 - num2 & num2 = num1^num2
num1 = num1 - num2 & num1 = num1^num2
输入输出的参数使用注意
传递实参时,必须在实参前面加上& ;不能传入常量或者字面量(比如10)作为参数值(因为不可改)
输入输出参数不能有默认值;输入输出参数不能是可变参数
let、var 修饰( inout 和 let 、var 不能共存)
8.4、其他价值:
可以实现函数的多返回值(其实让函数返回元组类型,也能实现返回多个值)
func plusAndMinus(num1: Int, num2: Int) -> (sum: Int, min: Int) {
return (num1 + num2, num1 - num2)
}
var result = plusAndMinus(22, num2: 14)
result.sum // 36
result.min // 8
func plusAndMinus(num1: Int, num2: Int,inout sum: Int, inout min: Int) -> () {
sum = num1 + num2
min = num1 - num2
}
var sums = 0; var mins = 0
plusAndMinus(12, num2: 6, sum: &sums, min: &mins )
sums // 18
mins // 6