美文网首页
2.2、函数

2.2、函数

作者: 艾希_可可 | 来源:发表于2017-06-28 09:58 被阅读10次

    //: 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

    相关文章

      网友评论

          本文标题:2.2、函数

          本文链接:https://www.haomeiwen.com/subject/llaycxtx.html