Swift3.0学习--函数及闭包

函数

  • 格式
1
2
3
4
5
6
func 函数名(参数名:参数类型..)-> 返回值{
//代码实现
}
func name(parameters) -> return type {
function body
}
  • 函数的普通调用
1
2
3
4
5
6
7
8
9
10
11
//定义函数
func sum(x: Int, y: Int) -> Int {
return x + y
}
//调用
//Swift1.0调用
print(sum(10, 12))
//Swift2.0调用
print(sum(10, y: 12))
//Swift3.0调用
print(sum(x: 10, y: 12)) //输出:22
  • 函数的特殊调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//1.先定义一个函数
func sum(x: Int,y: Int) -> Int{
return x + y
}
//2.在需要调用的地方用一个常量来记录这个函数
//'f'的类型是(Int, Int) -> Int,竟然是函数的类型
let f = sum
//3.在需要执行的时候,直接用常量(f)调用
print(f(100, 200)) //输出:300
```swift
- **函数的外部参数**
- 外部参数就是给形参前面加一个字
- 外部参数的使用并不会影响到函数内部的细节
- 被调用起来更加直观,告诉调用者形参的具体内容,使代码可读性
- 外部参数可以使用'_'忽略
```swift
//定义函数
//告诉被调用者x和y是个数(num)
func sum1(num1 x: Int, num2 y: Int) -> Int {
return x + y
}
//调用
print(sum1(num1: 10, num2: 20)) //输出:30
//定义函数
//用不到的变量,用_替代,如上面的num1和num2,只是定义的时候用了一次,就再也没用了;
func sum2(_ x: Int, _ y: Int) -> Int {
return x + y
}
//调用
print(sum2(10, 20)) //输出:30
  • 函数的默认值
    • OC函数没有默认值,Swift才有
    • 函数有了默认值,就可以省略很多代码,比如说OC中SDWebImage框架中的方法,针对不同的参数有好多方法,但是方法最后调用的都是包含参数最全的一个方法;在Swift中就可以不用这么麻烦了
1
2
3
4
5
6
7
8
9
10
11
//定义函数
//给函数的参数设置默认值
func sum3(num1 x: Int = 1, num2 y: Int = 2) -> Int {
return x + y
}
//调用函数
//并且给参数传递不同的值
print(sum3()) //输出:3
print(sum3(num1: 10)) //输出:12
print(sum3(num2: 20)) //输出:21
print(sum3(num1: 10, num2: 20)) //输出:30
  • 函数的无返回值
    • swift中函数是特殊的闭包
1
2
3
4
5
6
7
8
9
10
11
12
13
//函数无返回值三种情况
//1.全部省略的情况
func demo1() {
print("直接省略")
}
//2.-> ()de 情况
func demo2() -> () {
print("()")
}
//3.返回值是Void的情况
func demo3() -> Void {
print("Void")
}

闭包

  • 特点
    • 类似OC中的Block
    • Swift中的函数是特殊的闭包(上面有提到)
    • 需要提前准备好代码,然后在需要的时候直接执行,也可以当做参数传递
    • 参数,返回值,以及代码的实现都写在 {}内
    • 需要使用‘ in ‘分隔定义和实现
    • {形参列表 -> 返回值类型 in // 实现的代码}
  • 简单使用介绍

    • 最简单的闭包:无参数无返回值,{}内除了实现代码,() -> () in都可以省略

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      //完整版
      let b1 = { () -> () in
      print("完整版简单闭包")
      }
      //执行闭包
      b1() //输出:完整版简单闭包
      //省略版
      let b1 = {
      print("省略版简单闭包")
      }
      //执行闭包
      b1() //输出:省略版简单闭包
    • 带参数的闭包

      1
      2
      3
      4
      5
      let b2 = { (x: Int) -> () in
      print(x)
      }
      b2(29) //输出:29
    • 带参数,带返回值的闭包

      1
      2
      3
      4
      5
      6
      let b3 = { (x: Int) -> Int in
      return(x)
      }
      print(b3(112)) //输出112
      }
这个人很帅<br>他什么都不想说<br>