前言:
本篇为视频学习笔记
函数的定义
func pi() ->Double { return 3.14 } func sum(v1: Int, v2: Int) -> Int { return v1 + v2 } sum(v1: 10, v2: 20)
首先呢,函数必须在前面写清楚func,其实func就是function的简称,就是函数的意思。接下来,就是函数名,小括号里面放参数,右边我们写一个减号大于号->就是返回值的一个类型。
第一个明显是一个没有参数的函数返回值是Double类型,所以返回3.14。第二个函数,是接受两个Int类型的参数,返回Int类型,直接返回v1+v2。那么,我们调用pi函数的话如 pi( )。在调用sum函数的时候,因为sum默认的要传两个参数,所以在调用的时候必须要把参数名加上V1、V2。sum(v1: 10, v2: 20)
★ 形参默认是let,也只能是let
★ 无返回值 (三种写法)
func sayHello1() -> Void { print("Hello") } func sayHello2() -> () { print("Hello") } func sayHello2() { print("Hello") } // ( )是空元祖
隐式返回(Implicit Return)
★ 如果整个函数体是一个单一表达式,那么函数会隐士返回这个表达式
Xcode10func sum(v1: Int, v2: Int) -> Int { v1 + v2 } sum(v1: 10, v2: 20) // 30 备注:我在Xcode10上,是报错的,在视频中不是报错的,估计是用的Xcode11.
返回元祖:实现多返回值
func calculate(V1: Int, V2: Int) -> (sum:Int, difference: Int, average: Int) { let sum = V1 + V2 return (sum, V1 - V2, sum >> 1) } let result = calculate(V1: 20, V2: 10) result.sum // 30 result.difference // 10 result.average //15
★例子:
如果想要返回多个值的话,在swift中使用元祖就可以了。比如说,我传两个整数给你,要求计算出他们的和、差、和平均值,那么我们怎么班呢?那么这个时候,我们就可以定义一个元祖为返回值,并且要求这个元祖包含三个值,sum是和difference是差、average也就是平均值。到时候,怎么做呢,返回元祖的时候很简单,到时候,来一个V1+V2,代表我们的和,V1-V2就是差,直接用它们的和右移>> 1位 ,不就除以2了吗。 按左1位 相当于 *2 按右1位相当于 除以 2 就知道了这个。这样的话,就有三个值了。那么将这两个值的时候,就会算出这三个值了。
备注:
左移运算 (<<):一个比特(Bit)位只有 0 和 1 两个取值,左移运算符 << 就是把操作数的各个二进制位全部左移若干位,高位丢弃,低位补 0。右移运算 (>>):一个比特(Bit)位只有 0 和 1 两个取值,右移运算符 >> 就是把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。 如果数据的最高位是 0,那么就补 0;如果最高位是 1,那么就补 1。
函数的文档注释
文档注释是一个什么鬼呢?
func sum(v1: Int, v2: Int) -> Int { return v1 + v2} sum(v1: 10, v2: 20)
有的时候,我们想看一下,sum这个函数的功能是什么?两个参数是什么意思?按照我们的习惯,会按option键会出现一个问号❓,点进去。如下图:
很遗憾,并没有说明v1是什么?v2是什么?也没有说明返回值是什么?像这种显示,我们叫做文档注释。这种文档注释,要求我们程序员自己写的。那Swift文档注释的格式是什么呢?如下:
/// 求和【概述】 /// /// 将2个整数相加【更详细的描述】 /// /// - Parameter v1: 第1个整数 /// - Parameter v2: 第2个整数 /// - Returns: 2个整数的和 /// /// - Note:传入两个整数即可【批注】 /// func sum(v1: Int, v2: Int) -> Int { return v1 + v2} sum(v1: 10, v2: 20)
左边三个斜线这种注释,第一行来说一般是概述,一定要空一行,空一行在写代表更详细的描述,如果前两行连在一块的话,识别不出来这两个是不一样的。建议大家写一个空格。在换一行。在写一个减号,写一个Paramerer,这是固定写法。v1、v2后边就写一个参数名称,写一个冒号,写你的注释,告诉他这个参数是干嘛用的。- Returns 就是说明返回值是什么。 - Note:一般做些什么批注/笔记。比如说,你这个方法有什么特殊的用法。有什么技巧可以写到- Note:这个位置。效果如下图:
除了文档注释外,我们还能写些什么呢?
★ 参考链接: API设计指南
参数标签(Argument Label)
★ 可以修改参数标签
就像我们刚才调用sum(v1: 10, v2: 20)时,v1、v2可以成为参数标签,其实我们是可以修改这个参数标签的。
例子:
func goToWork(at time: String) { print("this time is \(time)") } goToWork(at: "08:00") // this time is 08:00
我们这个函数名叫做goToWork,goToWork是上班的意思,在(at time: String)会传入一个时间进来,代表什么时间点上班,那你注意看这个参数写了两个单词一个叫at ,一个叫time,这个time好理解明显跟在类型后边,我们知道它是一个形参,到时候,传入参数,肯定会给这个time,我们在函数体里面肯定会通过这个time来访问外面传进来的。那么,左边这个at 是个什么意思呢,是用来给你调用的。这样写的话,就代表以后调用的这个标签就是at了。到时候,这个time是用在函数体里面的,at 是用在外边的。
那你肯定会觉得很奇怪,为什么要出这种要求呢,这种技术呢?这种原因很简单,思考一下如果我们不写at,那是什么意思呢?那就意味着你的调用必须写goToWork(time: "08:00") ,必须写time。如果写了at ,那么调用就会变成goToWork(at: "08:00")这个。那么这两个有什么区别呢?
其实,很明显的区别,就在于这个调用的地方,你会觉得加上at 的这个调用读起来像一个英文句子 go to Work at 08:00。goToWork(at: "08:00")读起来很通顺,goToWork(time: "08:00")读起来很怪。苹果API设计准则中更希望我们goToWork(at: "08:00")这样做。函数名和参数读起来,就像读英文句子一样。整体的意思更好理解。
★ 可以使用下划线_省略参数标签
func sum(_ v1: Int,_ v2: Int) -> Int { return v1 + v2} sum(10, 20)
网友评论