从零开始的SWIFT开发之函数篇

105 阅读3分钟

前言

之前做过一个swift项目,也看过一些视频讲解,但是终究不是很具体很详细很系统,想着能够好好学一下swift,终于找到了MJ大神的视频,这里做一些记录和总结,把一些好的东西和具体的细节罗列出来,以后也好运用,本篇主要针对是swift5以后,因为swift5是相对ABI比较稳定了,不像之前的版本,每个版本方法不统一,本文章会不断更新。

注释

方法注释

截屏2022-05-19 17.08.39.png

这里注意,左边是三个横,每次标题结束中间都空了行,前面的Paramters是固定的,只需要对方法点击option键就可以跳出来,很方便在看方法的时候知道这个方法是什么意思了

函数

函数参数标签

截屏2022-05-19 17.31.05.png

为方便阅读,可以在参数前面加标签,参数只是满足函数内部传参,标签可以方便函数的理解。

截屏2022-05-19 17.32.49.png

通过在参数前面加_可以在调用的时候不用显示参数,但是这种一般不推荐,除非是特别简单的方法。

截屏2022-05-19 17.36.41.png

如果加了默认参数,那么在调用的时候可以不用传参。

截屏2022-05-19 17.45.54.png

给出默认参数的值,可在调用的时候选择要不要赋值。

可变参数

截屏2022-05-19 18.01.28.png

三个点表示可以传多个,类似于数组。

注意点:紧跟在可变参数后面的参数,标签不可省略。 截屏2022-05-19 18.03.20.png

解释默认的print函数:第一个是可变参数,可以传入多个值,第二个是分隔符,默认是用空格分隔,第三个是结束符,默认换行,可以通过重新给这三个参数赋值改变打印。

截屏2022-05-19 18.06.50.png

内部参数修改影响外部

因为是值类型,所以传入的参数是let类型,不能在内部修改他的值,如果一定要修改,那么要加inout关键字,并且在调用的时候加&注意可变参数不能加inout,inout不能有默认参数值,inout的本质就是引用地址传递。

截屏2022-05-19 18.38.29.png

截屏2022-05-19 18.40.14.png

内联函数

在开启了编译器优化之后,编译器会自动将某些函数变成内联函数,默认的release模式下是开启的,debug模式不开启,内联函数就是会将一些简单的函数体直接展开,提高性能。函数体较长,包含递归调用动态派发不会内联。内联函数一定要是明确知道要调用的函数。

注意@inline(never) 加载func前面,表示永远不会被内联,@inline(__always)表示在开启了编译器优化以后,即使代码块很长,也会被内联,但递归调用动态派发不会内联。

函数类型作为参数传递

截屏2022-05-20 10.54.12.png

函数类型可以作为参数,像加法也是一种变量类型,定义好之后,可以作为printResult函数的参数传递,然后通过对应的方法做加法还是减法。

截屏2022-05-20 11.03.49.png 既然存在函数类型,那么函数类型也可以作为函数的返回值,如图,(Int)->Int 是函数类型,同时也是forward函数的返回值,这种类型又符合next函数和previous函数,所以可以调用。