• swift:入门知识之函数与闭包


    1、swift中使用关键字func来声明和定义一个函数。调用函数使用它的名字加上小括号中的参数列表。

    2、swift使用->方向符号分隔参数的名字和返回值类型

    3、swift使用元组(tuple)来返回多个值

    4、函数可以接收可变参数个数,手机到一个数组中

    5、函数可以嵌套。内嵌函数可以访问其定义的所在函数的变量。使用内嵌函数组织代码,可以避免过长和过于复杂

    6、函数是第一类型的,这意味着函数可以作为返回值返回

    7、函数还可以作为另一个函数的参数使用

    8、闭包,闭包相当于一个匿名函数(匿名函数做函数的参数),所有传函数参数的地方都可以使用闭包

    9、有时当你调用一个函数将每个形参进行命名是非常有用的,以表明你把每个实参传递给函数的目的。此时,可以为参数设置外部形参名。 

    具体举例如下:

    定义一个有参数的函数,返回值为Int型函数,使用->类型来返回值

    //定义一个有参数的函数
    func sum(a:Int,b:Int)->Int{
        return a+b
    }
    //函数调用
    sum(10, 20) //30

    使用元组来返回多个值,通过元组名.0获取第一个值,剩下的值依次可以获取

    //使用元组来返回多个值的函数
    func getGasprices()->(Double,Double,Double){
        return (1.0,2.0,3.0)
    }
    //函数调用
    getGasprices()   //(.0 1.0, .1 2.0, .2 3.0)

    通过一个类型...的方式定义可变参数的函数,参数个数根据你调用函数时传递的参数而定

    //定义可变参数的函数
    func sumOfArr(numbers:Int...)->Int{
        var sum = 0
        for temp in numbers{
            sum += temp
        }
        return sum
    }
    //函数调用
    sumOfArr(2,4,6,1,7,8) //28

    在函数内部嵌套定义另一个函数

    //函数内部嵌套定义函数
    func returnFunc()->Int{
        var y = 10
        func add(){
            y += 5
        }
        add()
        return y
    }
    //函数调用
    returnFunc()    //15

    可以将函数作为一个返回值返回

    //从函数内部函数返回一个函数
    func makeIncrement()->(Int->Int){
        func addOne(number: Int)->Int {
            return 1 + number
        }
        return addOne
    }
    //接收一个返回的addOne函数
    var increment = makeIncrement()
    
    //调用这个返回的函数
    increment(7)   //8

    函数可以作为参数使用

    //函数做参数使用
    func search(Array:[Int],Condition:Int->Bool)->Bool{
        for num in Array{
           if Condition(num){
              return true
           }
        }
        return false
    }
    func equalTen(num:Int)->Bool{
        return num == 10
    }
    var arr:[Int] = [23,15,7,9,10]

    //将equalTen函数作为search函数的参数 search(arr, equalTen) //true

    闭包的使用,其实闭包就是一个匿名的函数,它被当做参数传递给函数,类似Objective-C中的block函数

    //闭包,闭包相当于一个匿名函数(匿名函数做函数的参数)
    //所有传函数参数的地方都可以使用闭包
    
    //实例一:number.map({...})是系统定义好的一个闭包函数
    var numbers = [2,4,5,1,6]
    numbers.map({(number:Int)->Int in
        
         return number * number
    })
    
    
    //实例二:自定义的一个闭包函数
    func search2(arr:[Int],Condition:(Int)->Bool)->Bool
    {
        for num in arr{
           if Condition(num){
              return true
           }
        }
        return false
    }
    
    var arr2 = [3,5,6,9,2]
    
    search(arr2, {(number:Int)->Bool in
        return number == 6
    })

    参数外部名的使用:

    兴趣来了,给大家分享一个超前的知识,使用swift创建一个按钮蛮好玩的

    //创建按钮
    var button:UIButton = UIButton(
        frame: CGRectMake(0, 0, 100, 100))
    button.backgroundColor = UIColor.redColor()
    button.setTitle("open", forState:UIControlState.Normal)

    截图:

    函数形参名知识拓展:有时给参数设置一个外部名,在调用函数时可以明确知道所传参数的意思.避免含糊不清....

    普通的参数名格式:

    外部形参名格式:

    使用外部形参名有很大的好处,可以很明确的表达函数的意思,避免含糊不清。例如:

    //调用这个函数时,所传的意思比较模糊:

    //给它设置一个外部名,传参数时意思就一目了然了。

    外部参数名称速记

    如果你想为一个函数提供一个外部形参名,然而本地形参名已经使用了一个合适的名称了,那你就不需要两次书写该形参的名称。相反,你可以写一次名字,并用一个hash符号(#)作为名称的前缀。这就告诉Swift使用名称相同的本地行参名称和外部形参名称。

    默认形参值

    你可以为任何形参定义默认值以作为函数定义的一部分。如果已经定义了默认值,那么调用函数时就可以省略该行参。

    注意:请在函数形参列表的末尾放置带默认值的形参。这将确保所有函数调用都使用顺序相同的无默认值实参,并让在每种情况下清晰地调用相同的函数。

    有默认值的外部形参名

    在大多数情况下,为所有形参提供一个带默认值的外部名是非常有用的(因此要求)。如果在调用函数的时候提供了一个值,那么这将确保形参对应的实参有着明确的目的。

    为了使这个过程更容易,当你自己没有提供外部名称时,Swift将为你定义的任何默认形参提供一个自动外部名。这个自动外部名和本地名一样,就像你已经在本地名前添加了hash符号(#)一样。

  • 相关阅读:
    C++我们必须要熟悉的事之具体做法(3)——类的设计与声明
    C++我们必须要了解的事之具体做法(1)——构造、复制构造、析构、赋值操作符背后的故事
    STL hash table, Unordered Contains
    多个生产者——多个消费者模型(互斥量条件变量实现)
    将UNIX网络编程卷2的库函数合并到卷1的库函数中
    进程间通信(三)——Posix共享内存区
    进程间同步(1)——条件变量和互斥量
    进程间通信(二)——Posix消息队列
    python使用百度翻译api
    screen命令
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4902973.html
Copyright © 2020-2023  润新知