第二节 流程控制以及参数

  1. if else 的注意点:
  • if 后面的条件可以省略 小括号
  • 条件后面的大括号不可以省略
  • if 后面的条件必须是 bool 类型
  1. while 注意点
  • repeat-while 相当于OC中的 do-while循环
  • 不在适用num-- 自增自减运算符,从swift3开始去掉++,--改为num -= 1
    image.png

3.for 循环

  • 闭区间运算符:a...b,: a <= 取值 <= b(0...3 0<= X <=3)

  • 写法:


    image.png
  • image.png

注意点:for 循环的取值 i 默认是let常量,如果想他的值可以在前面添加 var字段 for var i in 1...3

  • 如果你的for循环里面用不到 i 则可以写成 for _ in 0...3 {}
  • 半开区间运算符 a..,标识:a <= 取值 < b
  1. 区间运算符 运用在数组上
  • 运用
let names = ["A","B","C",“D”]
for name in names[0...2] {

   print("name = \(name)")
}
  • 单侧区间:让区间朝一个方向尽可能远


    image.png

names[2...] 数组不会越界,达到最大值,此处代表 从2到3,取值为 ”C",“D”,左侧方向也是同样道理

  • 如果写在数组外面 let range = ...5 代表 从 无穷小 到 5!
    image.png

可以调用 contains()方法,是否包含某个数。

  1. 区间类型
  • 范围的类型是 区间类型例如:let range = ...5
  • let range1: ClosedRange = 1...3 闭区间类型
  • let range2:Range = 1..<3
  • let range3: partialRangeThrough = ...5
  • 字符、字符串也可使用区间运算符,但是默认不能用在 for-in 中 !
    image.png
  • 带间隔的区间符


    image.png

注意这里 如果through取值为10 最后也会包含这个值

6. Switch
  • case 跟 default 后面是不能加{}的

  • switch 后面可以不加 break;

  • image.png
  • 如果想要贯穿Switch 可以加 fallthrough 即可

  • 注意点:必须要保证能处理所有情况,记得后面加上 default: break
    *如果能保证你已经处理的所有类型,default :break 也不是必须要加的:例如枚举类型

    image.png

  • 复合条件 他的条件 可以是字符跟字符串

7. 区间匹配跟元组匹配
image.png

后面的一个代码的意思:

  • 代表 这个点是否在一个正方形里面
  • (_,0)下划线 表示:忽略这个值,只要后一个匹配就可以
8.值绑定
image.png

可以把 x的值赋值给后面case语句的变量

9. Where
image.png

这里 where 是决定 where后面的条件是否能进入{} ,而不是退出循环,相当于 continue

函数

  1. func pi() -> void {

} func 函数名(参数)-> 返回值{}

  1. 函数的形参 默认就是 let 常量类型,而且只能是 let常量,不允许在左边写var.
  1. 隐式返回
    返回值 只有一句表达式时,可以不写 return
image.png
  1. 返回元组,实现多返回值


    image.png
  2. 函数的文档注释 固定格式
    /// 第一行【概述】
    ///
    /// 功能描述
    ///
    /// - Parameter v1:第一个参数
    /// - Parameter v2:第二个参数
    /// - Returns: 返回值描述
    ///
    /// - Note:批注
    ///
    func sum(v1: Int,v2: Int) -> Int { v1 + v2 }

苹果官方规范文档:

https://swift.org/docunmetation/api-design-guidelines/
6.参数标签
func goToWork(at time:String){ } goToWork(at:"8:0:0")

  • 可以使用 _ 省略函数标签
    func (_ v1:Int , _ v2:Int) ->Int {v1+v2}
  • 默认参数


    image.png

C++ 的默认参数值是从右边开始设计的,不允许隔空设置!


image.png

func sum(_ v1:Int , v2:Int) -> Int{v1+v2} 这里下划线的意思是,你在传参的时候 可以忽略V1标签即:sum(20,v2:15).[图片上传失败...(image-cef63a-1611909761520)]

7.可变参数
image.png

可以暂时认为numbers是一个数组

  • 一个函数最多只能有一个可变参数
  • 紧跟在可变参数后面的一个参数 不能省略参数标签,不能加下划线
8.Print函数
image.png

print函数:separator:分隔符,terminator:结束符,你可以传参来 自己添加分隔符跟结束符

  1. 输入输出参数
  • inOut 定义输入输出参数
    func add(_ num: inout Int) { num = 20 } 调用 add(&number) 调用需要加上 & 符号

  • 交换两个数的值 用元组实现


    image.png
  • 可变参数不能是 inout,并且 inout 参数没有默认值,inout的本质是地址传递

  • 汇编: call 后面接着函数地址,lea 指令:地址传递指令

  • inout 只可以传入 可以被多次赋值的变量

10.函数重载
  • 规则: ** 函数名相同 ** 参数个数不同、参数类型不同、参数标签不同
  • 返回值类型跟函数重载无关
11. 内敛函数
  • 如果开启了编译器优化(release 模式默认开启优化),编译器会自动将某些函数变成内敛函数
  • 内敛函数可以将函数调用变成函数体代码
  • 函数体比较长不会内敛
  • 递归调用不会内敛
  • 包含动态派发不会内敛
12 函数类型
  • 由参数类型跟返回值类型一致
  • 函数可以作为:参数,返回值,属性等等
13
image.png

image.png

补充:@inline 内敛标识

@inline(never) func test(){

print("test")
}

你可能感兴趣的:(第二节 流程控制以及参数)