使用闭包简化语法

//: Playground - noun: a place where people can play

import UIKit

// 初始化一个整数数组
var arr = [1, 3, 5, 7, 8, 10, 12, 2, 0, 11, 9]
// 排序, 默认是从小到大排序
arr.sort()
// 通过闭包, 自定义排序方法
arr.sort({(a: Int, b: Int) -> Bool in
    return a > b
})

arr = [1, 3, 5, 7, 8, 10, 12, 2, 0, 11, 9]
arr.sort()
// 使用闭包简化语法:由于swift能智能识别到闭包中参数类型和返回值类型
// 在定义闭包的时候, 可以简化成:
arr = arr.sort({(a, b) in return a > b })
arr

arr = [1, 3, 5, 7, 8, 10, 12, 2, 0, 11, 9]
// 在闭包中, return是可以省略的(仅限在函数体只有一句话的时候)
// 因此定义闭包的时候, 可以简化成:
arr = arr.sort({(a, b) in a > b})
arr

arr = [1, 3, 5, 7, 8, 10, 12, 2, 0, 11, 9]
// 另外, 在闭包中如果有内部参数, 闭包默认也会给它们参数名
// 格式为: $1 $2 分别代表第一个参数和第二个参数, 以此类推
// 跟着, in也就跟着省略了...
// 因此定义闭包的时候, 可以简化成:
arr = arr.sort({return $0 > $1})    // 这里return一样可以省略
arr

// 对上一节练习的简化:
var arr2 = ["aa", "b", "bb", "abcd", "aabbcc", "cdefg", "a", "c"]
arr2.sort({
    let string1Length = $0.characters.count
    let string2Lenght = $1.characters.count

    if string1Length != string2Lenght { // 长度不相等
        return string1Length < string2Lenght
    } else {                            // 长度相等
        return $0 < $1
    }
})

// 接下来出大招了..
// 针对上面只是简单的比较两个整数的大小
// 可以简化成下面的样子:
arr = [1, 3, 5, 7, 8, 10, 12, 2, 0, 11, 9]
arr = arr.sort(>)   // 因为">"本身就是一个函数..

  

时间: 2024-10-19 16:52:32

使用闭包简化语法的相关文章

.net 委托的简化语法

1. 不需要构造委托对象 ThreadPool.QueueUserWorkItem:通过线程池 public static void WorkItem() { ThreadPool.QueueUserWorkItem(SomeAsyncTask, 5); } public static void SomeAsyncTask(object o) { Console.WriteLine("SomeAsyncTask:{0}", 0); } 2. 不需要定义回调方法(lambda 表达式):

闭包的基础语法

//: Playground - noun: a place where people can play import UIKit // 初始化一个整数数组 var arr = [1, 3, 5, 7, 8, 10, 12, 2, 0, 11, 9] // 排序, 默认是从小到大排序 arr.sort() // 通过闭包, 自定义排序方法 arr.sort({(a: Int, b: Int) -> Bool in return a > b }) // 初始化一个字符串数组 var arr2 =

Swift特有语法:闭包

1. 闭包定义 闭包:闭包是自包含的函数代码块,可以在代码中被传递和使用.闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.Swift 会管理在捕获过程中涉及到的所有内存操作. 闭包采取如下三种形式: 全局函数是一个有名字但不会捕获任何值的闭包 嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 闭包表达式是一个利用轻量级语法所写的可以捕获其上下文中变量或常量值的匿名闭包 2. sort函数 sorted 函数(The Sorted Fu

【Python笔记】Python的几个高级语法概念浅析:lambda表达式 &amp;&amp; 闭包 &amp;&amp; 装饰器

本文主要记录自己对几个高级语法概念的理解:匿名函数.lambda表达式.闭包.装饰器. 这几个概念并非Python特有,但本文只限于用Python做说明. 1. 匿名函数 匿名函数(anonymous function)是指未与任何标识符绑定的函数,多用在functional programming languages领域,典型应用场合: 1) 作为参数传给高阶函数(higher-order function ),如python中的built-in函数filter/map/reduce都是典型的

Swift使用闭包表达式

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

swift闭包 notes http://www.gittielabs.com

Swift Closureshtml, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirror-scroll { overflow-y: hidden; overflow-x: auto; } .CodeMirror-lines { padding: 4px 0px; } .CodeMirror pre { padding: 0px 4px; } .CodeMirror-scrollbar-f

《从零开始学Swift》学习笔记(Day 22)——闭包那些事儿!

原创文章,欢迎转载.转载请注明:关东升的博客   我给Swift 中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式.函数参数和函数返回值,闭包表达式的运算结果是一种函数类型. Swift中的闭包类似于Objective-C中的代码块.Java中的匿名内部类. 使用闭包表达式 Swift中的闭包表达式很灵活,其标准语法格式如下: { (参数列表) ->返回值类型in 语句组 } 其中,参数列表与函数中的参数列表形式一样,返回值类型类似于函数中的返回值类型,但不同的是后面有in关键字.

Swift学习笔记七:闭包

闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用. Swift 会为您管理在 捕获 过程中涉及到的内存操作. 在 函数 章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三种形式之一: 1. 全局函数是一个有名字但不会捕获任何值的闭包 2. 嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 3. 闭包表达式是一个可以捕获其上下文中变量或常量值的没有名字的闭包 一.闭包表达式 闭包函数类似于Objective-C中的block.下面我们用事实说话: let counts =

swift闭包-备

我给Swift 中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式.函数参数和函数返回值,闭包表达式的运算结果是一种函数类型. Swift中的闭包类似于Objective-C中的代码块.Java中的匿名内部类. 使用闭包表达式 Swift中的闭包表达式很灵活,其标准语法格式如下: { (参数列表) ->返回值类型 in 语句组 } 其中,参数列表与函数中的参数列表形式一样,返回值类型类似于函数中的返回值类型,但不同的是后面有in关键字. Swift提供了多种闭包简化写法,我来介绍下面