【swift-总结】闭包

其实闭包就是函数

作为条件的函数

闭包表达式

首先声明一个数组

var names = ["Charis", "Alex", "Ewa", "Barry", "Daniella"]

将这个数组按照字母排序

声明一个闭包函数

func backwards(s1: String, s2:String) -> Bool  {
    return s1 > s2
}

sorted()函数返回一个数组,sort()函数返回空,排序自身

///传入闭包函数
names.sort(backwards)

使用闭包表达式

//闭包表达式就是一个函数在花括号里面
names.sort({(s1: String, s2: String) -> Bool in return s1 > s2})

又因为swift的值是可推断类型

上面的又可以简化

var reversed = names.sorted({s1, s2 in return s1 > s2})

单闭包隐式返回

//会隐式return
names.sorted({s1, s2 in s1 > s2})

名称缩写

names.sort({$0 > $1})

运算符函数

names.sort(>)

尾随闭包

有时候闭包表达式太麻烦,可以把闭包写在调用函数后面的花括号中

//调用sort函数,后面添加花括号,然后闭包表达式就写在这里
names.sort() {$0 > $1}

官方例子

//声明一个字典
let digitNames = [0:"zero", 1:"one", 2:"two", 3:"three", 4:"four", 5:"five", 6:"six", 7:"seven", 8:"eight", 9:"nine"]

//一个数组
let numbers = [16, 58, 510]

//调用map函数,里面传入闭包
let strings = numbers.map{

//传入一个number返回一个String
    (var number) -> String in
    var output = ""
    while number > 0 {
        output = digitNames[number % 10]! + output//找到每一个数字,转为字符串
        number /= 10
    }
    return output
}

值捕获

首先闭包是引用类型

官方例子

///定义一个返回() -> Int 类型的函数
func makeIncrementor(forIncrement amount:Int) -> () -> Int {
    var runningTotal = 0

    //一个闭包函数
    func incrementor() -> Int {
        runningTotal += amount;
        return runningTotal
    }

    //返回这个闭包,此时这个闭包已经包含runningTotal和amount的值
    return incrementor
}
let incrementByTen1 = makeIncrementor(forIncrement: 10)

let incrementByTen2 = makeIncrementor(forIncrement: 1)

incrementByTen1()   //10 所以值会被闭包一直保留
incrementByTen1()   //20

incrementByTen2()   //1

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-28 19:52:17

【swift-总结】闭包的相关文章

swift 深入理解Swift的闭包

我们可用swift的闭包来定义变量的值. 先来一个简单的例子大家先感受感受. 定义一个字符串的变量的方法: 直接赋值 var str="JobDeer" 还可以用闭包的方式定义: var str:String={ return "JobDeer" }() 闭包还可以这么定义,省略了等号和括号: var str:String{ return "JobDeer" } 闭包中可以定义get方法. var str:String{ get{ return

Swift:闭包

一.闭包的介绍 闭包表达式(Closure Expressions) 尾随闭包(Trailing Closures) 值捕获(Capturing Values) 闭包是引用类型(Closures Are Reference Types) 闭包是自包含的函数代码块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的 lambdas 函数比较相似. 闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的

Swift使用闭包表达式

Swift中的闭包表达式很灵活,其标准语法格式如下:{ (参数列表) ->返回值类型 in    语句组}其中,参数列表与函数中的参数列表形式一样,返回值类型类似于函数中的返回值类型,但不同的是后面有in关键字.Swift提供了多种闭包简化写法,这一节我们将介绍几种不同的形式.1.类型推断简化类型推断是Swift的强项,Swift可以根据上下文环境推断出参数类型和返回值类型.以下代码是标准形式的闭包:{(a:Int, b:Int) -> Int in    return a + b}Swift

Swift学习--闭包的简单使用(三)

一.Swift中闭包的简单使用 override func viewDidLoad() { super.viewDidLoad() /** 闭包和OC中的Block非常相似 OC中的block类似于匿名函数 闭包是用来定义函数 作用:Block是用于保存一段点,在需要的时候执行 闭包也是用于保存一段点,在需要的时候执行做一个耗时操作 */ /** 闭包的基本格式: { (形参列表)->() in 需要执行的代码 } */ /** * 闭包的几种格式: 1.将闭包通过实参传递给函数 2.如果闭包是

Swift函数闭包

一.闭包的概念 计算机语言要支持闭包的前提条件有2个: 1.支持函数类型,能够将函数作为参数或返回值传递: 2.支持函数嵌套 示例: func caculate(opr : String)->(Int,Int)->Int { var result:(Int,Int)->Int switch(opr){ case "+": result={(a:Int,b:Int)->Int in return a+b } default: result = {(a:Int,b:

Swift:闭包(Closures)

一. 基本概念 闭包(Closures)是自包括的功能代码块,能够在代码中使用或者用来作为參数传值. 在Swift中的闭包与C.OC中的blocks和其他编程语言(如C#)中的lambda, javascript中的函数嵌套等类似. 闭包能够捕获和存储上下文中定义的的不论什么常量和变量的引用. 这就是所谓的变量和变量的自封闭, 因此闭包还会处理全部捕获的引用的内存管理. 全局函数和嵌套函数事实上就是特殊的闭包. 闭包的形式有: (1)全局函数都是闭包.有名字但不能捕获不论什么值. (2)嵌套函数

Swift的闭包(二):捕获值

闭包可以从定义它的上下文中捕获常量和变量. 在Swift中,捕获值最简单的例子是嵌套函数,举个例子: 1 func makeIncrementer(forIncrement amount: Int) -> () -> Int { 2 var runningTotal = 0 3 func incrementer() -> Int { 4 runningTotal += amount 5 return runningTotal 6 } 7 return incrementer 8 } 在这

4 .Swift函数|闭包

在编程中,我们常把能完成某一特定功能的一组代码,并且带有名字标记类型叫做函数,在C语言中,我们知道函数名就是一个指针,它指向了函数体内代码区的第一行代码的地址,在swift中也具有同样的功效. 在Swift中函数的表现形式如下: 1. func 函数名(参数名1:参数类型,参数名2,参数类型)->返回值类型 {函数的实现部分} func sayHello()->Void { print("hello world") } //有参数,有返回值, func sayHello2(

【Swift】闭包(Closures)

闭包表达式(Closure Expressions) 嵌套函数 是一个在较复杂函数中方便进行命名和定义自包含代码模块的方式.当然,有时候撰写小巧的没有完整定义和命名的类函数结构也是很有用处的,尤其是在您处理一些函数并需要将另外一些函数作为该函数的参数时. 闭包表达式是一种利用简洁语法构建内联闭包的方式. 闭包表达式提供了一些语法优化,使得撰写闭包变得简单明了. 下面闭包表达式的例子通过使用几次迭代展示了sort(_:)方法定义和语法优化的方式. 每一次迭代都用更简洁的方式描述了相同的功能. so

关于Swift的闭包(closure)以及其在可选(Optional)类型中的应用

对于新手(如笔者)来说,闭包是Swift语言特性中很难理解的一部分.其原因可能有一部分在于一些人把复杂的函数写得很简单,新手会看不懂.闭包可以理解为把函数当做一个变量来看待.既然是变量,那么就自然可以作为参数传递给其它的函数.也就是说,实际上是把一个函数传递给了另一个函数.本文将详解闭包以及其在Optional型中的应用. 我们知道Swift采用了一种非常安全的称之为Optional的类型.这个Optional类型只可能有两种状态,一种是“什么都没有”(nil),另一种是“有什么东西”,只有这两