Swift语言精要-闭包(Closure)

简介: 闭包(Closure)这个概念如果没学过Swift的人应该也不会陌生。 学过Javascript的朋友应该知道,在Javascript中我们经常会讨论闭包,很多前端工程师的面试题也会问到什么是闭包。 那么,什么是闭包呢? 让我们看下在Javascript中闭包的解释: Closu...

闭包(Closure)这个概念如果没学过Swift的人应该也不会陌生。

学过Javascript的朋友应该知道,在Javascript中我们经常会讨论闭包,很多前端工程师的面试题也会问到什么是闭包。

那么,什么是闭包呢?

让我们看下在Javascript中闭包的解释:

Closures are functions that have access to variables from another function’s scope.

(This is often accomplished by creating a function inside a function. )

闭包是一个函数能够访问另外一个函数作用域内变量。

(这通常通过在一个函数内申明另一个函数来实现)

通过上面的定义我们不难判断,闭包具备以下两点特征:

1. 闭包是函数

2. 闭包是函数内部的函数

3. 闭包可以访问另一个函数的变量

我们先来看下Javascipt闭包的例子:

function createComparisonFunction(propertyName) {
    return function(object1, object2) {
        var value1 = object1[propertyName];
        var value2 = object2[propertyName];

        if (value1 < value2) { 
            return -1;
        } else if (value1 > value2) { 
            return 1;
        } else { 
            return 0;
        } 
    };
}

 测试代码:

var compare = createComparisonFunction(“name”);
var result = compare({ name: “Nicholas”, age: 35 }, { name: “Greg”, age: 28 });
console.log(result); // 1

 

上面的Javascript代码中我们可以看到,

createComparisonFunction函数内部申明的匿名函数可以访问createComparisonFunction函数本身的参数,这正符合了我们闭包的定义。

 

好了,Swift中闭包大致也是类似的,我们来看下闭包在Swift中的定义:

Closures are discrete bundles of functionality that can be used in your application to accomplish specific tasks.

闭包是用来在你的应用程序内部完成某些特殊任务的一些彼此互不相关的函数集。

读着有些拗口,还是让我们用例子来说话吧,看下下面的例子:

我们先来看一个不适用闭包的数组排序的例子

 

import Cocoa

// 不使用闭包
var counts = [1, 6, 2, 28, 13, 2, 9, 100, 30]

func sortAscending(i: Int, j: Int) -> Bool {
    return i < j
}

let sortedCounts = counts.sort(sortAscending)

 

现在,我们看下,使用闭包代码会变得更加简洁

import Cocoa

// 使用闭包
var counts = [1, 6, 2, 28, 13, 2, 9, 100, 30]

let sortedCounts = counts.sort({
    (i: Int, j: Int) -> Bool in 
        return i < j
})

 

Swift的闭包语法:

{(parameters) -> [return type] in
  // Code
}

 

通过类型推断(type inference)让闭包变得更加简洁:

import Cocoa

var counts = [1, 6, 2, 28, 13, 2, 9, 100, 30]

let sortedCounts = counts.sort({ i, j in i < j })

 

 通过参数占位符让代码变得更简洁:

import Cocoa

var counts = [1, 6, 2, 28, 13, 2, 9, 100, 30]

let sortedCounts = counts.sort({ $0 < $1 })

不难判断,上面的代码$0代表了第一个参数也就是i, 而$1代表了第一个参数也就是j。

 

哇撒,代码变得越来越短了嘛,还可以再短些吗?

答案是可以的!

还记得C++的内联函(inline function)数嘛,在swift中我们也有!

把括号去掉就是了!

于是,代码变成了如下的样子:

 

import Cocoa

var counts = [1, 6, 2, 28, 13, 2, 9, 100, 30]

let sortedCounts = counts.sort { $0 < $1 }

 

目录
相关文章
|
3天前
|
机器学习/深度学习 TensorFlow Swift
Swift语言适合多个领域的开发
Swift语言适合多个领域的开发
23 9
|
2月前
|
存储 安全 Swift
Swift 语言为公司电脑管理软件带来新机遇
在数字化时代,公司电脑管理软件的重要性日益凸显,Swift 语言为其带来了全新机遇。Swift 语言具备简洁、安全和高效的特点,易于学习且能有效防止程序错误和漏洞,同时充分利用硬件资源,提升程序运行速度。通过 Swift,我们可以编写代码以获取硬件信息、管理软件安装与卸载,甚至实现远程控制和数据加密等功能,极大地提高了管理效率和数据安全性,为公司电脑管理提供了强大的支持。未来,Swift 语言有望助力开发综合性电脑管理平台,集成多种功能,进一步提升工作效率和数据保护能力。
43 4
|
4天前
|
机器学习/深度学习 人工智能 移动开发
Swift语言作为苹果公司推出的现代编程语言
Swift语言作为苹果公司推出的现代编程语言
20 8
|
6天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
24 9
|
4天前
|
机器学习/深度学习 安全 数据挖掘
Swift语言的应用场景非常广泛
Swift语言的应用场景非常广泛
16 4
|
4天前
|
安全 Swift iOS开发
Swift语言
Swift语言
14 4
|
19天前
|
安全 API Swift
探索iOS开发中的Swift语言之美
【10月更文挑战第23天】在数字时代的浪潮中,iOS开发如同一艘航船,而Swift语言则是推动这艘船前进的风帆。本文将带你领略Swift的独特魅力,从语法到设计哲学,再到实际应用案例,我们将一步步深入这个现代编程语言的世界。你将发现,Swift不仅仅是一种编程语言,它是苹果生态系统中的一个创新工具,它让iOS开发变得更加高效、安全和有趣。让我们一起启航,探索Swift的奥秘,感受编程的乐趣。
|
21天前
|
Swift UED
Swift 中使用闭包处理事件
【10月更文挑战第20天】使用闭包来处理事件在 Swift 编程中是一种非常常见和有效的方式。它提供了简洁、灵活和高效的解决方案,使我们能够更轻松地实现各种交互功能。通过深入理解闭包的原理和应用方法,我们可以更好地利用闭包来处理各种事件,提升应用的用户体验和开发效率。
|
12天前
|
存储 Swift iOS开发
Swift 闭包
10月更文挑战第28天
18 0
|
1月前
|
安全 Swift iOS开发
探索iOS开发中的Swift语言之美
在数字时代的浪潮中,移动应用已成为日常生活的延伸。本文将深入探讨iOS平台上的Swift编程语言,揭示其背后的设计哲学、语法特性以及如何利用Swift进行高效开发。我们将通过实际代码示例,展示Swift语言的强大功能和优雅简洁的编程风格,引导读者理解并运用Swift解决实际问题。