美文网首页
Swift闭包

Swift闭包

作者: 奔跑的鸿 | 来源:发表于2020-06-19 00:59 被阅读0次
  • 闭包表达式是匿名函数
    闭包表达式的类型和函数的类型一样, 是参数加上返回值, 也就是in之前的部分
    以下为闭包表达式
in关键字的目的是便于区分返回值和执行语句
{
 (参数) -> 返回值类型 in
 执行语句
 }

一般形式:{
 (parameters) -> returnType in
 statements
 }

完整写法:

let say:(String) -> Void = {
    (name: String) -> Void in
    print("hello \(name)")
}
say("HaRi")

当然以上可省略say右边的闭包类型

let say = {
    (name: String) -> Void in
    print("hello \(name)")
}
say("HaRi")

有多个参数,且有返回值的写法

let calAdd:(Int,Int)->(Int) = {
    (a:Int,b:Int) -> Int in
    return a + b
}
print(calAdd(100,150))

Swift可以根据闭包上下文推断参数和返回值的类型,所以上面的例子可以简化如下

let calAdd2:(Int,Int)->(Int) = {
    (a,b) in
    return a + b
}
print(calAdd2(150,100))

以上当参数类型省略时,参数的括号也可一并省去,如:

let calAdd2:(Int,Int)->(Int) = {
    a,b in
    return a + b
}

单行表达式闭包可以隐式返回,如下,省略return

let calAdd3:(Int,Int)->(Int) = {(a,b) in a + b}
print(calAdd3(50,200))

如果闭包没有参数,可以直接省略“in”

let calAdd4:()->Int = {return 100 + 150}
print("\(calAdd4())")

如果闭包既没有参数也没返回值,可以把return和in都省略

let calAdd5:()->Void = {print("我是250")}
calAdd5()
  • 自动闭包:
    • 自动创建的闭包,封装一堆表达式在自动闭包中。
    • 自动闭包是不接受任何参数的,可以有返回值
    • 只有一句表达式时,可省略return,会自动返回表达式产生的值。
    • 自动闭包让你能够延迟求值,直到调用这个闭包,闭包代码块才会被执行
var array = ["1","100","hi","hello"]
//自动闭包只有一句表达式时,既可以省略闭包类型:"(参数) -> 返回值类型 in",又可以省略return
let removeBlock = {array.remove(at: 3)}
/**它实际上等价于
let removeBlock = {
    () -> Any in
    return array.remove(at: 3)
}
*/
print(array.count) // 4

print("执行代码块移除\(removeBlock())")
print(array.count) // 3

相关文章

  • Swift-闭包

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

  • Swift闭包和函数

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

  • swift4 闭包

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

  • Swift中的闭包

    在Swift中有两种闭包,逃逸闭包(@escaping)和非逃逸闭包(@nonescaping)。从Swift 3...

  • 100 Days of Swift - Day 06 - 闭包(

    100 Days of Swift - Day 06 - 闭包Closures 6.1 闭包 Swift函数也属于...

  • swift学习

    * 闭包 * 闭包作为属性 ```swift // 声明闭包类型 typealias callba...

  • iOS swift 逃逸闭包(@escaping)和非逃逸闭

    iOS swift 逃逸闭包(@escaping)和非逃逸闭包 (@noescaping) 逃逸闭包: 逃逸闭包...

  • iOS&Swift&OC 闭包和Block的相互转化

    一、Swift的闭包 -> OC的block 二、OC的block -> Swift的闭包

  • swift闭包学习

    闭包作为参数 参考 Swift学习之闭包

  • Swift学习笔记(1)

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

网友评论

      本文标题:Swift闭包

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