美文网首页Swift 从入门到放弃
swift5 基本语法-闭包

swift5 基本语法-闭包

作者: 翀鹰精灵 | 来源:发表于2021-01-05 18:35 被阅读0次
在swift中,说到闭包表达式(Closure Expression),我们就能想起来Objective-C中的Block,确实两者之间非常相似,功能也基本相同,都可以在代码中使用或者用来作为参数传值。我们一起来学习下swift中的闭包用法。
在swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数。
1.闭包语法

{
(参数列表) ->返回值类型 in 函数体代码
}

例1:

var sumClosure = {(a: Int, b: Int) -> Int in
    return a + b
}

sumClosure(10,20)
2.尾随闭包

尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用。

例2:

func someFunctionTrailingClosure(closure: () -> Void) {
    // 函数体部分
}

// 以下是【不使用】尾随闭包进行函数调用
someFunctionTrailingClosure(closure: {
    // 闭包主体部分
})

// 以下是【使用】尾随闭包进行函数调用
someFunctionTrailingClosure() {
  // 闭包主体部分
}
3.自动闭包 @autoclosure

比如,定义了一个函数,函数有两个参数,第一个是一个Int值,第二个参数是()->Int 这样一个无参数的闭包。

//比较第一个数据>0 返回第一个数,否则返回第二个数
func compare(_ a : Int, _ b : () -> Int) ->Int {
    return a > 0 ? a : b()
}

let result1 = compare(-10) { () -> Int in
    30
}
print(result1)

正常情况下我们根据xcode提示,直接回车的话是这样调用的,我们可以简化下

let result2 = compare(-10, {30})
print(result2)

但是这种可读性又太差了,所以我们可以在闭包前面加上@autoclosure

//比较第一个数据>0 返回第一个数,否则返回第二个数
func compare(_ a : Int, _ b : @autoclosure () -> Int) ->Int {
    return a > 0 ? a : b()
}

let result1 = compare(10, 20)

小结

  • ① @autoclosure,它帮我们的表达式自动封装成一个闭包。如:会自动将20封装成闭包{ 20 }
  • ② @autoclosure只适用于这样的()->T 无参闭包。
  • ③ @autoclosure并非只支持最后一个参数
  • ④ 空合并运算符?? 就是使用了 @autoclosure 技术
public func ?? <T>(optional: T?, defaultValue: @autoclosure () throws -> T?) rethrows -> T?

相关文章

  • swift5 基本语法-闭包

    在swift中,说到闭包表达式(Closure Expression),我们就能想起来Objective-C中的B...

  • Swift 2 学习笔记 9.闭包

    课程来自慕课网liuyubobobo老师 闭包 闭包的基本语法 闭包语法的简化 结尾闭包 内容捕获 闭包和函数是引用类型

  • 闭包

    闭包的基本语法 闭包的内容捕获 闭包和函数的引用类型

  • 闭包-Closures [swift 5.1]

    闭包的语法 尾随闭包 闭包逃离 自动闭包

  • Swift语法 Swift5 【07 - 闭包】

    作者: Liwx 邮箱: 1032282633@qq.com 源码: 需要源码的同学, 可以在评论区留下您的邮箱 ...

  • swift语法--12-1闭包基本概念

    swift语法--12-1闭包基本概念 block和闭包区别 OC:block类似于匿名函数, 用于封装代码块, ...

  • Swift~ @escaping @noescaping 逃逸

    闭包表达式语法 闭包表达式语法有如下的一般形式: 闭包只有在函数中做参数时,才会区分逃逸闭包和非逃逸闭包 Swif...

  • 闭包和jQuery基本语法

    闭包 1、闭包的用途:存循环的索引值函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机...

  • Swift 基本语法(函数, 闭包)

    前言 接上篇, 这篇聊一下 Swift中的 函数, 闭包 一 函数 二 闭包 Swift 基础 先介绍三篇, ...

  • Swift基本语法之闭包

    Swift基本语法之初体验-常量变量-数据类型 Swift基本语法之逻辑分支 Swift基本语法之循环 Swift...

网友评论

    本文标题:swift5 基本语法-闭包

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