函数 -定义
// MARK: - 闭包 / Block `很像`
func closureDemo1() {
// (Int, y: Int) -> Int
// 如果指向的函数,没有提供外部参数,在使用的时候,没有智能提示
let myBlock1 = sum
print(myBlock1(10, y: 20))
// (x: Int, y: Int) -> Int
// 如果指向的函数,提供外部参数,在使用的时候,有智能提示
let myBlock2 = sum1
print(myBlock2(x: 20, y: 80))
// {} 是用来包装代码,闭包中的所有内容需要包含在 {} 中
// () -> ()
// 最简单的闭包
let myBlock3 = {
print("hello")
}
myBlock3()
// {} 是用来包装代码,闭包中的所有内容需要包含在 {} 中
// 如果有参数和返回值
// (Int, Int) -> Int
// 格式 { (形式参数列表)->返回类型 in // 代码实现 }
// in 是用来区分函数定义和代码实现的
let myBlock4 = { (x: Int, y: Int) -> Int in
return x + y
}
print(myBlock4(9, 8))
}
// MARK: - 返回类型
/*
无返回类型-> 定义 `闭包` 的时候使用
1. 省略
2. ()
3. Void
函数名是指向函数的内存首地址
OC是运行时,以消息的方式,发送消息!方法!
*/
func demo() {
print("hello")
}
func demo1() -> Void {
print("xixi")
}
func demo2() -> () {
print("hehe")
}
// MARK: - 默认值
// 函数的默认值,定义函数的时候 `= 值` 来指定
// 所有指定了默认值之后的函数,可以任意组合参数
// 指定了哪个参数,就使用哪个参数,否则使用默认值参与计算
func sum4(x: Int = 8, y: Int = 20, z: Int = 10) -> Int {
return x + y + z;
}
// MARK: - 外部参数
// 如果使用 `_` 作为外部参数,会 `忽略` 参数名的提示
func sum3(x: Int, _ y: Int) -> Int {
// 如果不关心遍历的索引,可以直接使用 `_`
for _ in 0..<10 {
print("hello")
}
return x + y
}
// 格式:func 函数名(外部参数 形参1: 类型1, ...) -> 返回类型 { // 代码实现 }
// 外部参数是 `供外界访问` 调用的,可以让函数的语义更加清楚,不会影响到内部
// 形参 是供函数内部使用
func sum2(num1 x: Int, num2 y: Int) -> Int {
// String(format: <#T##String#>, arguments: <#T##[CVarArgType]#>)
// String(format: <#T##String#>, <#T##arguments: CVarArgType...##CVarArgType#>)
return x + y
}
func sum1(x x: Int, y: Int) -> Int {
return x + y
}
// 格式:func 函数名(形参列表) -> 返回类型 { // 代码实现 }
func sum(x: Int, y: Int) -> Int {
return x + y
}
}