• Swift具体解释之三----------函数(你想知道的都在这里)


    函数(你想知道的都在这里)

    注:本文为作者自己总结。过于基础的就不再赘述 ,都是亲自測试的结果。如有错误或者遗漏的地方。欢迎指正。一起学习。


    1、 函数的简单定义和调用

    简单的无參函数就不再赘述 , name为形參 。也是内部在数名 。

    func sayHello(name:String) ->String
    {
        return name+" say: hello"
    }

    调用的时候也非常easy sayHello("zhangsan")
    是不是非常easy呀!

    2、外部參数名

    什么是外部參数名呢。事实上就是你给形參起得一个有意义的别名,让别人更理解这个參数的用途 。

    func sayHello1(YourNmae name:String,name2:String) ->String
    {
        return name+" say: hello "+name2
    }

    这里调用的时候要加上这个别名sayHello1(YourNmae: "zhangsan",name2:"lisi")
    swift 默认从第二个參数開始自己主动加外部參数名。等于内部參数名 。
    假设你不想输入外部參数名能够在前面加个下划线

    //忽略外部參数名
    func add(a:Int , _ b:Int) ->Int
    {
        return a + b
    }
    add(1, 1) //2

    3、參数默认值

    函数传入參数的时候能够给一个默认值,传參数的时候这个有默认值的可传可不传

    func plus(a:Int,another b:Int=0) -> Int
    {
        return a+b;
    }

    这里给b的默认值是0,在调用的时候 print(plus(1)) 得到结果是1 。 plus(1,another:2) 得到结果是3

    4、可变參数

    可变參数(variadic parameter)能够接受一个或多个值。函数调用时。你能够用可变參数来传入不确定数量的输入參数。通过在变量类型名后面增加(…)的方式来定义可变參数。

    传入可变參数的值在函数体内当做这个类型的一个数组

    func arithmeticMean(numbers: Double...) -> Double {
        var total: Double = 0
        for number in numbers {
            total += number
        }
        return total / Double(numbers.count)
    }

    这里numbers被当成了一个数组 arithmeticMean(1,2,3,4,5.5) 得到结果 3.1

    也能够传String 或者不论什么其它类型

    func say(name:String, content:String ... )
    {
        var str = name;
        for item in  content
        {
            str += item + " "
        }
        print(str)
    }

    调用say("lily ", content:"like" ,"eat" ,"apple") 结果:lily like eat apple

    5、常量參数和变量參数

    函数參数默认是常量。试图在函数体中更改參数值将会导致编译错误
    error
    我这里尝试去改动name的值,这里提示我不能改动let value

    可是,有时候,假设函数中有传入參数的变量值副本将是非常实用的。你能够通过指定一个或多个參数为变量參数,从而避免自己在函数中定义新的变量。变量參数不是常量,你能够在函数中把它当做新的可改动副本来使用。

    这时候我们须要。通过在參数名前加关键字 var 来定义变量參数:

    func say1(var name:String)->String
    {
        name += "2"
        return name;
    }

    调用函数say1("wangwu") 得到结果:wangwu2

    6、函数类型(Function Types)

    什么是函数类型呢? 事实上每一个函数都有种特定的函数类型。由函数的參数类型和返回类型组成。比方上面的say1的函数类型就是(String)->String ,无參数和返回值的 ()->() 返回Void类型的函数
    pic
    看下swift中Void事实上是一个空得元组

    以下看下怎么使用函数类型 。

    • 函数类型变量
      var mySay:(String)->String = say1

      跟定义普通的变量一样 ,把函数类型当普通类型使用就可以,这里say1 就是我们前面写的那个函数
      当然我们也能够利用swift的仅仅能判断,不指定类型var mySay = say1
      调用的时候跟调用普通函数一样mySay("hello") 结果:hello2

    • 函数类型作为參数类型

      func sayWord(mySay:(String)->String , name:String)->String
      {
      return mySay(name)
      }

      这里我们定义了一个函数,须要传入两个參数。第一个參数是一个函数类型的 (String)->String, 最后返回一个String .
      调用的时候我们能够在这里给它传一个定义好得函数 sayWord(say1,name: "my")。 结果:my2
      我们也能够使用闭包sayWord({ "($0)2" },name: "my") 结果:my2
      在这里有些人可能还不太了解闭包,先不用管下一节会具体介绍 。

    • 函数类型作为返回类型

      有时候我们须要在不同的情况下使用不同的函数 ,比方我们须要传入一个数字。这个数字大于0使用Forward ,小于 0 使用 Backward , 当然这里仅仅是简单的逻辑,能够用if - else搞定 ,可是逻辑十分复杂的时候能够分两个函数来写

      来看下样例 :

      func stepForward(input: Int) -> Int {
      return input + 1
      }
      func stepBackward(input: Int) -> Int {
          return input - 1
      }
      func chooseFunc(distance:Int) -> (Int)->Int
      {
          return distance>10 ? stepBackward:stepForward
      }
      

      这里定义两个非常easy的函数 ,还是在定义了一个依据传入參数而选定函数的函数

      var input = 10;
      for i in 8...14
      {
          input = chooseFunc(i)(input)
          print(input)
      }
      

      我们在这里 分别给函数传入8 –14 ,得到的函数在传入10 。看下这个数字的改变 。结果是 :11 12 13 12 11 10 9 这个应该非常easy理解

    7、返回元组

    我们的函数也能够返回一个元组类型

    func minMax( arr:Int ... )->(max:Int,min:Int)
    {
        var max = 0
        var min = 0
        for item in  arr
        {
            if(item<max)
            {
                max = item
            }
            if(item>min)
            {
                min = item
            }
        }
        return (max,min)
    }
    

    这是一个非常easy的函数 ,传入一个可变參数 ,然后求出这写里面的最大和最小值 。

    调用 :minMax(2,3,5,88,98,-3) 结果 :(.0 -3, .1 98)

    可选元组 - 有时候我们函数里面返回的是一个nil 。所以这是我们就须要把我们的元组写成可选元组。
    注意:(Int,Int)?

    与 (Int?

    ,Int?) 不同, (Int,Int)? 表示整个元组是可选的 而不是每一个元素是可选的

    func mm()->(max:Int,min:Int)?

    { return nil } if let c = mm() { print("aa") }else { print("bb") }

    这段代码最后输出的是 bb

    8、输入输出參数 inout

    将函数的參数声明成inout 这个值能够在函数中改动 , 然后被传出函数 替换原来的值 ,所以不能仅仅传入 字面量 要传入地址 加 &

    var  myDate  =  9
    func normalFunc(var data:Int)
    {
        data = 100
    }
    normalFunc(myDate)
    print(myDate)  //9
    
    func inoutFunc(inout data:Int)
    {
        data = 100
    }
    inoutFunc(&myDate)
    print(myDate)  //100
    

    能够看到,普通函数不会改变实參的值。而inout回改变 。传得时候一定要加上 & ,事实上不加也会爆错得。。

    9、嵌套函数

    你能够把函数定义在别的函数中 叫做嵌套函数 嵌套函数对外界是不可见的

    还是我们刚才那几个函数 ,还能够这么玩。

    func MychooseFunc(distance:Int) -> (Int)->Int
    {
        func stepBackward(input: Int) -> Int {
        return input - 1
        }
        func stepForward(input: Int) -> Int {
            return input + 1
        }
        return distance>10 ? stepBackward:stepForward
    }
    

    临时先这么多吧, 以后想到什么再来补充 ,大家能够收藏了当字典,忘记了来查查使用方法。

    学习iOS,有他就够了。小码哥视频。传智、黑马、各种swift书籍

  • 相关阅读:
    【转】strlen和mb_strlen区别(php获得中英文混合字符长度)
    PHP字符串替换的相关方法介绍
    php表单转换textarea换行符的方法
    vue生命周期及其作用
    elemenui点击单行触发样式,选中或不选中复选框
    flutter 介绍和环境搭建
    flutter组件
    tora消息机制(事件监听,触发,取消)
    Promise功能与应用
    CCF CSP 20018031 跳一跳
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6964989.html
Copyright © 2020-2023  润新知