美文网首页
Swift3之函数(一)

Swift3之函数(一)

作者: 谁的青春不迷茫 | 来源:发表于2017-06-14 18:37 被阅读57次

    学习步骤:

    1. 函数概述
    2. 常量参数,变量参数, I/O 参数
      1.函数 -- 常量参数 2.函数 -- 变量参数(swift3.0已废弃) 3.函数 -- I/O 参数
    3. 参数个数的从0到多
      1.函数 -- 不带参数 2.函数 -- 带参数 3.可变参数
    4. 返回值个数的从0到多
      1.没有返回值函数 2.一个返回值 3.多个返回值 -- 元组

    一.先来了解一下函数:

    • Swift 定义函数使用关键字 func
    • 定义函数的时候,可以指定一个或多个输入参数和一个返回值类型。
    • 每个函数都有一个函数名来描述它的功能。通过函数名以及对应类型的参数值来调用这个函数。函数的参数传递的顺序必须与参数列表相同。
    • 函数的实参传递的顺序必须与形参列表相同,-> 后定义函数的返回值类型。

    func funcname(形参) -> 返回值类型
    {
    实现部分
    return 返回值
    }
    //---------------------------------
    形参可以没有,但是()必须有 返回值可以没有,没有返回值时 ->也没有 如:func test(){ }

    所以我们从形参(函数参数)返回值两部分来了解函数,至于实现部分则是功能模块,根据需要补充就行。

    二. 常量,变量及 I/O 参数

    1.函数 -- 常量参数

    默认在函数中定义的参数都是常量参数,也就是这个参数你只可以查询使用,不能改变它的值。

    func 函数名( 参数变量:类型 ,参数变量:类型...){}
    说明: 1: func 是函数关键字 2:{} 函数体 3: 参数变量是默认常量类型,不能在函数函数体里面直接修改

    /*
    测试参数变量的默认类型
    */
    func changeParam(value : Int) -> Int
    {
        value += 1;
        return value;
    }
    
    var test = 10;
    let A = changeParam(value:test);
    
    ---------------------
    以上代码会报错,终端打印的错误信息是:
    left side of mutating operator isn't mutable: 'value' is a 'let' constant
        value += 1;
    也就是说value 是 let 常量
    

    2.函数 -- 变量参数(swift3.0已废弃)

    查看更多swift3.x的特性
    过去可以在参数前加关键字 var 将其定义为变量,这样函数内部就可以对该参数进行修改(外部的参数任然不会被修改)。
    现在这种做法已经被废弃❌,Swift 3 不再允许开发者这样来将参数标记为变量了。

    func 函数名(var 参数变量 : 类型,... ) {}
    说明 1: func 函数关键字 2: var 参数变量 :类型 表示参数变量是可变变量,不是常量,可以修改
    ❌ 现在已经不可用,写出来是为了学习过swift2的同学知道

    现在只能用一个var变量接收常量参数来实现变量参数的功能了

    func changeParam( value : Int) -> Int
      {
        var value = value//下面再用到value就是变量类型了
        value += 1;
        return value;
      }
    

    3.函数 -- I/O 参数

    I/O参数又叫输入输出参数,它传入的参数是一个引用,在函数内部修改
    了I/O参数,对应的外部参数也会发生改变。
    当传入的参数作为输入输出参数时,需要在参数名前加 & 符,表示这个值可以被函数修改。
    因为I/O参数和外部变量指向同一内存地址,修改的是同一内存的数据,所以内外同时改变。 一般默认的参数传递都是传值调用(传入的只是这个参数的副本),而不是传引用。

    func 函数名(参数: inout 类型) { }

    var arr = [1,2,3,4,5];
    func testIOParam(dataArray: inout [Int])
    {
        if dataArray.count > 0 {
            dataArray .remove(at: 0);
        }
    }
    
    testIOParam(dataArray: &arr);//传入的是arr对应的地址  &为取地址符
    print(arr);
    

    输出结果为
    [2, 3, 4, 5]

    三. 函数参数

    函数可以接受一个或者多个参数,这些参数被包含在函数的括号之中,以逗号分隔。
    func 函数名(参数1:类型 ,参数2:类型,参数3:类型) {函数实现 }

    1.函数 -- 不带参数

    func 函数名() -> 返回值类型
    {
    return 返回值
    }

    func test()
    {
        print("无参函数")
    }
    

    2.函数 -- 带参数

    func 函数名(参数1:类型 ,参数2:类型 ,参数3:类型) -> 返回值类型
    {
    return 返回值
    }
    参数个数根据需要而定

    func add(a: Int, b: Int) -> Int
    {
        return a + b;
    }
    print(add(a: 10, b: 5));
    

    3.可变参数

    可变参数可以接受零个或多个值。函数调用时,你可以用可变参数来指定函数参数,其数量是不确定的。
    可变参数通过在变量类型名后面加入...的方式来定义。

    func add(numbers: Int...) -> Int
    {
        var totle = 0;
        for num in numbers {
            totle += num;
        }
        return totle;
    }
    
    print(add(numbers: 1,2,3,4,5));//调用时多个参数用 , 隔开
    

    四. 函数返回值

    1.没有返回值函数

    /*
         知道即可,主要是用于闭包,在阅读第三方框架代码时保证可以看懂即可。
         1. 省略返回值   这种最常用。
         2. 返回 ()
         3. 返回 void
        这三种形式在{ }内都不能使用return返回数据,否则会报错
         */
       //情况一
        func 函数名(参数) { }
        //情况二
        func 函数名(参数) -> () { }
        //情况三
        func 函数名(参数) -> Void { }
    
    func test1()
    {
        print("无需return返回")
    }
    
    func test2() ->()
    {
        print("无需return返回")
    }
    
    func test3() -> Void
    {
        print("无需retrun返回")
    }
    

    2.一个返回值

    func 函数名(形参)-> 返回值类型
    {
    return 返回值
    }

    func add(a: Int, b: Int) -> Int
    {
        return a + b;
    }
    print(add(a: 10, b: 5));
    

    3.多个返回值 -- 元组

    多个返回值(大于1个)并不是用多个 ->实现返回,而是使用元组的形式。
    不了解元组的同学可以看下这篇文章swift元组

    //举例而已,不要在意函数有没有意义😄
    func address(province:String ,city:String)->(province:String ,city:String){
        
        return (province:province,city:city)
    }
    var addr = address(province: "河南", city: "郑州")
    
    print("省:\(addr.province),市:\(addr.city)")
    
    

    返回值是元组的话,可以根据元组的不同声明方式来改变函数如

    func address(province:String ,city:String)->(String ,String){
        
        return (province,city)
    }
    
    var (addr1,addr2) = address(province: "河南", city: "郑州")
    
    print("省:\(addr1),市:\(addr2)")
    

    自己研究元组吧,我就不墨迹了。


    到这里大家看懂一般的函数已经没问题了,但是呢,总有一些意外情况,让学了以上部分的你感觉不知所措。学海无涯,我们接着来

    Swift3之函数(二)

    相关文章

      网友评论

          本文标题:Swift3之函数(一)

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