★学习笔记:《iOS高级:Swift入门精讲②》第一节 Swift编程-01➡05函数

前言:

本篇为视频学习笔记

函数的定义

 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)

★ 如果整个函数体是一个单一表达式,那么函数会隐士返回这个表达式

 func sum(v1: Int, v2: Int) -> Int {
     v1 + v2
 }
 sum(v1: 10, v2: 20) // 30
备注:我在Xcode10上,是报错的,在视频中不是报错的,估计是用的Xcode11.
Xcode10

返回元祖:实现多返回值

 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)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容