前言
之前做过一个swift项目,也看过一些视频讲解,但是终究不是很具体很详细很系统,想着能够好好学一下swift,终于找到了MJ大神的视频,这里做一些记录和总结,把一些好的东西和具体的细节罗列出来,以后也好运用,本篇主要针对是swift5以后,因为swift5是相对ABI比较稳定了,不像之前的版本,每个版本方法不统一,本文章会不断更新。
注释
方法注释
这里注意,左边是三个横
,每次标题结束中间都空了行
,前面的Paramters
是固定的,只需要对方法点击option
键就可以跳出来,很方便在看方法的时候知道这个方法是什么意思了
函数
函数参数标签
为方便阅读,可以在参数前面加标签,参数只是满足函数内部传参,标签可以方便函数的理解。
通过在参数前面加_
可以在调用的时候不用显示参数,但是这种一般不推荐,除非是特别简单的方法。
如果加了默认参数,那么在调用的时候可以不用传参。
给出默认参数的值,可在调用的时候选择要不要赋值。
可变参数
三个点表示可以传多个,类似于数组。
注意点
:紧跟在可变参数后面的参数,标签不可省略。
解释默认的print函数:第一个是可变参数,可以传入多个值,第二个是分隔符,默认是用空格分隔,第三个是结束符,默认换行,可以通过重新给这三个参数赋值改变打印。
内部参数修改影响外部
因为是值类型,所以传入的参数是let类型,不能在内部修改他的值,如果一定要修改,那么要加inout关键字,并且在调用的时候加&
,注意
可变参数不能加inout,inout不能有默认参数值,inout的本质就是引用地址传递。
内联函数
在开启了编译器优化之后,编译器会自动将某些函数变成内联函数,默认的release模式下是开启的,debug模式不开启,内联函数就是会将一些简单的函数体直接展开,提高性能。函数体较长
,包含递归调用
、动态派发
不会内联。内联函数一定要是明确知道要调用的函数。
注意
@inline(never) 加载func前面,表示永远不会被内联,@inline(__always)表示在开启了编译器优化
以后,即使代码块很长,也会被内联,但递归调用
、动态派发
不会内联。
函数类型作为参数传递
函数类型可以作为参数,像加法也是一种变量类型,定义好之后,可以作为printResult函数的参数传递,然后通过对应的方法做加法还是减法。
既然存在函数类型,那么函数类型也可以作为函数的返回值,如图,(Int)->Int 是函数类型,同时也是forward函数的返回值,这种类型又符合next函数和previous函数,所以可以调用。