美文网首页swiftiOS-swift
Swift闭包(一):基础篇

Swift闭包(一):基础篇

作者: 长不大的帅小伙 | 来源:发表于2017-02-09 14:32 被阅读186次

Swift闭包和OC中block很类似,是一段自包含的函数代码块,可以在代码中使用和传递。相当于一个匿名函数

闭包写法和演变过程

通过一个例子来说明这个问题:

func testClosure(value: Int, paramFunc: (Int) -> Int) -> String {
    return String(paramFunc(value))
}

这段事例代码再简单不过了,不过我这里还是要说明下testClosure这个函数下的paramFunc参数,这个参数的类型是(Int) -> Int(是一个返回Int,参数是Int的函数)。

最原始写法

既然paramFunc参数需要传一个(Int) -> Int类型函数,那么就写一个函数作为参数传递,这种写法的好处就是,这个函数不仅可以在这里当参数传递,还可以在其它地方使用。

func aa(v: Int) -> Int {
    return v
}
testClosure(value: 10, paramFunc: aa)

闭包写法

  • 闭包完整写法
testClosure(value: 10, paramFunc: { (v: Int) -> Int in
    return v * 10
})
  • 尾随闭包,如果闭包是函数的最后一个参数,闭包参数可以写在参数括号外。
testClosure(value: 10) { (v: Int) -> Int in
    return v * 10
}
  • 闭包的一些简写方式 (无论是否是尾随闭包都可以根据下面的规则进行简写,我这里只给出了尾随闭包的省略写法实例)
    1. Swift可以根据上下文推理参数和返回值类型,这样返回值类型和参数类型可以省略不写。
    2. 如果闭包主体中是单行语句,单行语句计算结果会隐式地返回,return关键字可以省略。
    3. 参数和in可以去掉,闭包的参数可以通过位置来访问
// 自动推导返回值类型,参数类型
testClosure(value: 10) { v in
    return v * 10
}

// return 省略了
testClosure(value: 10) { v in
    v * 10
}

// 注意与函数的区别,函数是有func修饰的,而这里长的很想函数,其实不是函数,而是在调用函数
testClosure(value: 10) {
    $0 * 10
}

相关文章

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

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

  • Swift闭包(一):基础篇

    Swift闭包和OC中block很类似,是一段自包含的函数代码块,可以在代码中使用和传递。相当于一个匿名函数 闭包...

  • Swift基础篇——闭包

    闭包的主要意义是在一些场景中实现语法的优化,比如可以利用上下文来推断出参数和返回值的类型,而不需要像函数一样必须指...

  • 托XX福写个Swift闭包教程

    闭包基础知识 Swift闭包和OC的block类似不过还是有点区别 OC的block是一个匿名函数 Swift 中...

  • Swift闭包和函数

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

  • Swift3.0_闭包(Closure)

    闭包基础 ** 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objecti...

  • Swift-闭包

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

  • Swift闭包(二):进阶篇

    Swift闭包的基础笔者已经写了一篇,如果你还不是很清楚基本使用,建议先看基础篇,如果已经会了,那直接跳过,一起学...

  • swift4 闭包

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

  • Swift基础-- 闭包

    一,闭包的定义 闭包是自包含的函数代码块,可以在在代码中被传递和使用。 闭包能捕获和存储骑在上下文中任意常量和变量...

网友评论

    本文标题:Swift闭包(一):基础篇

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