美文网首页SwiftiOS-swiftSwift开发技巧
Swift 中的利刃,函数和闭包

Swift 中的利刃,函数和闭包

作者: SwiftCafe | 来源:发表于2015-07-25 08:26 被阅读457次

关于闭包的概念,相信有过其他语言开发经验的朋友都不会陌生了。简单来说闭包的语言特性,大大增加了我们的开发效率。而 Swift 更是将闭包运用的游刃有余,仿佛为它而生。下面咱们进入正题。

Swift 中闭包的概念就像是 Objective-C 中的 block闭包可以嵌套和作为参数传递。 在 Swift 中,函数也只不过是一种特殊的闭包

定义函数

Swift 中 可以使用 func 关键字来定义函数。函数可以接收并返回一个或者多个参数和元组。 返回值跟随在 -> 符号后。

func sayHello(firstName: String, lastName: String) -> String {
    return "Hello \\(lastName) \\(firstName)"
}

调用函数

prinln(sayHello("John", "Smith"))       //"Hello Smith John"

函数的类型

每个函数都有它自己的函数类型,通过它的参数和返回值来确定。比如这个函数:

func add(left: Int, right:Int) -> Int { return left + right }

它的函数类型为:

(Int, Int) -> (Int)

我们刚刚了解了函数类型的概念,它可以用来作为参数和返回值的类型来使用。

将函数作为参数和返回值传递

下面这个函数的返回值仍然是一个函数,并且作为返回值的这个函数可以赋值给一个变量并调用:

func buildSayHello() -> (String,String) -> String {
    
    func hello(firstName:String, lastName:String) -> String {
        
        return "Hello \\(lastName) \\(firstName)"
        
    }
    return hello
    
}

let hello = buildSayHello()
hello("John","Smith")

是不是有点奇妙的感觉了? 对,函数本身也是一个对象实例。

带有可变参数的函数

函数还可以接收任意数量的参数,通过 ... 来表示,然后我们就可以在函数体中用数组的形式访问这个函数了:

func todo (tasks:String...) -> () {
    
    for task in tasks {

        println("* \\(task)")
        
    }
    
}
todo("exercise","study","sleep")

定义闭包

我们刚说过,函数也是一种特殊的闭包,那么我们再来看下定义闭包的语法:

{() -> () in}

闭包的定义包含在一对大括号中,其中 () ->() 定义了函数的参数类型和返回值, -> 的左边括号中是参数列表,右边是返回值。然后用 in 关键字将闭包的头部和主体分隔开来。对闭包定义的一个描述:

{(param) -> returnType in
    statements
}

比如我们 Arraysort 方法接收的就是一个闭包参数:

var numbers:Array<Int> = [3,5,4,2,1,8]

numbers.sort { (lhs, rhs) -> Bool in
    return lhs < rhs
}

闭包的便捷操作

闭包还可以用参数的位置的形式来应用参数 ($0,$1,$2),比如还是上面那个数组例子:

var numbers:Array<Int> = [3,5,4,2,1,8]
numbers.sort({ return $0 < $1 })

再有,如果闭包作为参数列表中的最后一个参数,你可以直接忽略它外面的括号,就像这样:

numbers.sort { return $0 < $1 }

更多精彩内容可关注微信公众号:
swift-cafe

相关文章

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

  • Swift 中的利刃,函数和闭包

    关于闭包的概念,相信有过其他语言开发经验的朋友都不会陌生了。简单来说闭包的语言特性,大大增加了我们的开发效率。而 ...

  • Swift闭包和函数

    函数在Swift中只是一种特殊的闭包,闭包在Swift语言中是一等公民,支持闭包嵌套和闭包传递。Swift中的闭包...

  • swift学习笔记 ⑥ —— 闭包

    Swift学习笔记 - 文集 闭包,就是能够读取其他函数内部变量的函数。Swift 中的闭包与 C 和 OC 中的...

  • swift中的闭包

    swift中的闭包 闭包是自包含的函数代码块,可以在代码中被传递和使用。swift中的闭包与C和Objective...

  • swift4 闭包

    swift 闭包 闭包:swift 中 函数是闭包的一种类似于oc的闭包闭包表达式(匿名函数) -- 能够捕获上下...

  • Swift学习-闭包&& 懒加载&&am

    闭包 闭包的介绍 闭包和OC中的block非常相似OC中的block是匿名的函数Swift中的闭包是一个特殊的函数...

  • swift 闭包(闭包表达式、尾随闭包、逃逸闭包、自动闭包)

    闭包是自含的函数代码块,可以在代码中被传递和使用 闭包和swift的对比 Swift 中闭包与OC的 block ...

  • Swift学习笔记(1)

    SWift学习笔记 闭包 闭包表达式 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 ...

  • swift 非逃逸闭包、逃逸闭包的使用场景

    闭包只有在函数中做参数时才会区分逃逸闭包和非逃逸闭包。Swift 3.0之后,传递闭包到函数中的时候,系统会默认为...

网友评论

    本文标题:Swift 中的利刃,函数和闭包

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