1. 函数的定义
func 函数名(参数)-> 返回值类型 { 函数体 }
函数名( 参数名:参数值 )
// 函数的定义 有返回值
func sayHelloTo (name: String?) -> String {
return "Hello" + ( name ?? "Guest" )
}
var userName: String? = nil
sayHelloTo (name: userName)
// 函数的定义 无返回值
func hello () -> Void {
print("hello")
}
hello( )
2. 函数外部参数名和内部参数名
func 函数名 (外部参数名 内部参数名:参数类型 , 外部参数名 内部参数名:类型) -> 返回类型 { 函数体 }
函数调用
函数名 (外部参数名:值 , 外部参数名: 值)
func mutipleOf (num1 a:Int , num2 b:Int) -> Int {
return a*b
}
mutipleOf(num1: 2, num2: 2)
3. 默认参数值和可变参数值
默认参数值
func 函数名 ( 内部参数名:参数类型 = "默认参数值" 其他。。。)
func sayHelloTo (name: String , say: String = "Hello" , sex: String = "男") -> String {
return "\(name) , \(say) , \(sex)"
}
sayHelloTo(name: "Jack")
//Jack,Hello,男
可变参数值
func 函数名 ( 可变参数名:参数类型 ... ,其他。。。。 )
func sayHelloTo (names: String ... , say: String = "Hello" , sex: String = "男") {
for name in names {
print ("\(name),\(say),\(sex)")
}
}
sayHelloTo(names: "A","B","C")
//A,Hello,男
//B,Hello,男
//C,Hello,男
4. inout 参数 按引用传参
按引用传参 (可以改变参数在内存里的值而不是按值传入产生一个拷贝)
函数名(参数名: &变量名, 参数名: &变量名)
func swapTwoInts ( a: inout Int , b: inout Int){
//交换两个参数的值
(a , b) = (b , a)
}
var x = 10
var y = 20
swapTwoInts(a: &x, b: &y)
x //20
y //10
5. 使用函数类型
函数型变量声明类型 --- var 函数名: ( 参数类型 , 参数类型 , ... ) -> 返回类型
func add (a: Int , b: Int) -> Int {
return a + b
}
//函数型变量声明类型 (这里把函数当做变量用)
var addTwo:(Int,Int) -> Int = add
addTwo (2,3)
函数型变量的使用(把函数当做变量使用) (by: 函数变量名)
var arr = [12,33,21,55,78]
func isFirstNumber (a:Int , b:Int) -> Bool {
return a > b
}
arr.sort(by: isFirstNumber) //[78, 55, 33, 21, 12]
6. 返回函数类型和函数嵌套
// 第一种计算方法
func Tweight1 ( weight: Int) -> Int {
return 1 * weight
}
// 第二种计算方法
func Tweight2 ( weight: Int) -> Int {
return 3 * weight
}
func fee ( price: Int , weight: Int) -> Int {
// 嵌套函数
// 判断使用哪一种计算方法 并且以函数作为返回值
func choose ( weight: Int) -> (Int) -> Int {
return weight <= 10 ? Tweight1 : Tweight2
}
// 把choose(参数名:参数值)赋值给 abc函数型变量
let abc = choose(weight: weight)
// 返回 choose已经判断用第一种计算方法赋值给abc函数变量,abc函数变量参数是3用第一种计算方式去计算,结果是3,加上 price * weight 结果6,最终相加结果是9
return (abc(weight) + price * weight)
}
fee (price: 2,weight: 3)