2.2、函数

//: Playground - noun: a place where people can play

import UIKit

//函数:用来完成特定任务的代码块

/*

 函数声明: 告诉编译器函数的名字,返回类型及参数

 函数定义: 提供了函数的实体

 func(关键字) 函数名称 (参数名:参数类型,参数名:参数类型..)->函数返回值类型{函数实现部分}

 */

//无参返回值

funcsay(){

    print("hello")

}

say()

//有参数无返回值

funcsayWithName(name:String,age:Int){

    print("say is\(name)")

}

sayWithName(name:"Tom",age:18)

//有参数有返回值类型

funcinfoShow(name:String,age:Int)->String{

    return ("My name is\(name)")

}

letb =infoShow(name:"Tina", age:10)

print(b)

//嵌套函数

funcshowArray(array:[Int]){

    fornuminarray {

        print(num)

    }

    leta = array.count

    ifa>0{

        print("数组有值")

    }

//    func add(a:Int,b:Int)->Int{

//        return a + b

//    }

//    return add(a: 7, b: 8)

}

showArray(array: [2,3,4,5])

//默认情况下的参数都是内部参数,不能外部使用,外部参数只能外部使用,函数内部不能使用

//函数参数

funcjoinStr(s1:String,s2:String,value s3:String="name")->String{

    returns1+s2+s3

}

joinStr(s1:"1", s2:"2")

joinStr(s1:"1", s2:"2", value:"3")

//注意:如果参数有默认值,需要修改需加上外部参数名

//默认情况下,swift中所有参数都是常量参数,如需要修改需修改变量在函数内重新赋值

funcswapValue(a:Int,b:Int){

    vara = a

    varb = b

    print("交换前a =\(a) b =\(b)")


    lettemp = a

    a = b

    b = temp

    print("交换后a =\(a) b =\(b)")

}

swapValue(a:3,b:4)

//如果想在函数中修改外界传入的参数,可以在参数的数据类型添加关键字inout,这时候传递的是参数本身而不是参数的值

varx1 =10

varx2 =20

funcswap3(ax:inoutInt,bx:inoutInt){

    lettemp = ax

    ax = bx

    bx = temp

    print("交换后a =\(x1) b =\(x2)")

}

print("交换前a =\(x1) b =\(x2)")

swap3(ax: &x1, bx: &x2)

/*

 inout 关键字补充 swift有两种参数传递方式

 1、值传递

 值传递是参数的一个副本,这样在调用参数的过程中不会影响原始数据

 2、指针传递

 指针传递把参数本身引用(内存地址)传递过去,在调用的过程会影响原始数据

 说明上面inout是什么传递? 指针传递

 在swift中,只有class是指针传递,其余的比如Int、Float、Bool等都是值传递

 有时候我们需要通过一个函数改变函数外面变量的值(将一个值类型参数以引用方式传递),这时,Swift提供的inout关键字就可以实现

 注意 inout修饰的参数是不能有默认值的,

 一个参数一旦被inout修饰,就不能再用var 或者 let修饰

 */

varvalue =50

funcincrement(value:inoutInt, length:Int) {

    value += length

}

increment(value: &value, length: 20)//系统默认添加了一个&地址符号,说明可以修改原地址数据

print(value)

//如果有多个参数可以使用集合

funcadd(other:Int,nums:Int...)->Int{

    varsum =0

    fornuminnums{

        sum += num

    }

    returnsum


}

add(other:2, nums:1,2,3,4)

//函数实际上是一种特殊的闭包,你可以使用{}来创建一个匿名闭包。使用in将参数和返回值类型声明与闭包函数体进行分离。

varnumbers = [1,3,4,2,5]

numbers.map({

    (number:Int)->Intin

    letresult =3* number

    returnresult

})

//你可以通过参数位置而不是参数名字来引用参数——这个方法在非常短的闭包中非常有用。当一个闭包作为最后一个参数传给一个函数的时候,它可以直接跟在括号后面。

print("特殊闭包==",numbers.map({ numberin3* number }))

//map怎么使用

letmapnumbers = [1,2,3,4]

letresult =mapnumbers.map{ $0 +2}

print(result)  // [3,4,5,6]

//map 方法接受一个闭包作为参数, 然后它会遍历整个 numbers 数组,并对数组中每一个元素执行闭包中定义的操作。 相当于对数组中的所有元素做了一个映射。 比如咱们这个例子里面的闭包是讲所有元素都加 2 。 这样它产生的结果数据就是 [3,4,5,6]

/*

 ------------------------------函数类型:

 类似于C语言的指向函数的指针

 类似于OC语言的block

 函数类型是由函数的参数类型和返回值类型组成的

 */

//可以利用函数类型定义函数变量和常量

funcsum(a:Int,b:Int)->Int{

    returna + b

}

funcsub(a:Int,b:Int,c:Int)->Int{

    returna - b

}

// 这两个函数的类型是 (Int, Int) -> Int

// 函数类型可以作为函数返回值

funcmax(a:Int, b:Int) ->Int

{

    returna > b ? a : b

}

funcsub(a:Int, b:Int) ->Int

{

    returna - b;

}

// 可以利用函数类型定义函数变量和常量

varfuncP:(Int,Int) ->Int=sum

funcP = sub

print(funcP(10,20))

//练习 page130

//1、2 4 //2、为什么下面代码不编译 4没有逗号//3、3

//如果statuscode是个有5个元素的元祖,什么方式去获取到第五个值 1

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

推荐阅读更多精彩内容