`

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

阅读更多

Swift 2.0学习笔记(Day 22)——闭包那些事儿!

原创文章,欢迎转载。转载请注明:关东升的博客 

 

我给Swift 中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式、函数参数和函数返回值,闭包表达式的运算结果是一种函数类型。

Swift中的闭包类似于Objective-C 中的代码块、Java中的匿名内部类。

 

使用闭包表达式

Swift中的闭包表达式很灵活,其标准语法格式如下:

{ (参数列表) ->返回值类型in

    语句组

}

其中,参数列表与函数中的参数列表形式一样,返回值类型类似于函数中的返回值类型,但不同的是后面有in关键字。

Swift提供了多种闭包简化写法,我来介绍下面几种不同形式:

 

1、类型推断简化

类型推断是Swift的强项,Swift可以根据上下文环境推断出参数类型和返回值类型。以下代码是标准形式的闭包:

{(a:Int, b:Int) -> Int in

    return a + b

}

Swift能推断出参数abInt类型,返回值也是Int类型。简化形式如下:

{(a, b) in return a + b }

{a, b in return a + b }  //参数列表括号也可以省略

 

2、隐藏return关键字

在闭包内部语句组只有一条语句,如return a + b等,那么这种语句都是返回语句。前面的关键字return可以省略,省略形式如下:

{a, b in a + b }

使用这种简化方式修改后的示例代码如下:

func calculate(opr :String)-> (Int,Int)-> Int {
    var result : (Int,Int)-> Int
   
    switch (opr) {
    case "+" :
        result = {a, b in a + b } //return关键字省略了
    default:
        result = {a, b in a - b } //return关键字省略了
    }
    return result
}

 

省略的前提是闭包中只有一条return语句。

 

3、省略参数名称

Swift提供了参数名省略功能,我们可以用$0$1$2…来指定闭包中参数,$0指代第一个参数,$1指代第二个参数,$2指代第三个参数,以此类推$n+1指代第n个参数。

使用参数名省略功能,在闭包中必须省略参数列表定义,Swift能够推断出这些缩写参数的类型。参数列表省略了,in关键字也需要省略。参数名省略之后如下所示:

{$0 + $1}

使用参数名省略后的示例代码如下:

写道
func calculate(opr :String)-> (Int,Int)-> Int {

var result : (Int,Int)-> Int

switch (opr) {
case "+" :
result = {$0 + $1} //采用了参数名省略
default:
result = {$0 - $1} //采用了参数名省略
}
return result
}

let f1:(Int,Int)-> Int = calculate("+")
print("10 + 5 = \(f1(10,5))")

let f2:(Int,Int)-> Int = calculate("-")
print("10 - 5 = \(f2(10,5))")

 

 

4、使用闭包返回值

闭包表达本质上是函数类型,是有返回值的,我们可以直接在表达式中使用闭包的返回值。重新修改addsub闭包,示例代码如下:

写道
let c1:Int = {(a:Int, b:Int) -> Int in
return a + b
}(10,5)

print("10 + 5 = \(c1)")

 

 

解释:给c1赋值,后面是一个闭包表达式。但是闭包表达式不能直接赋值给c1,因为c1Int类型,需要闭包的返回值。这就需要在闭包结尾的大括号后面接一对小括号(10,5),通过小括号(10,5)为闭包传递参数。

 

  • 大小: 21.1 KB
分享到:
评论

相关推荐

    Swift学习笔记与资料集合

    "Swift编程入门与精通.pdf" 通常是市面上的第三方教材,旨在帮助读者从零开始直至熟练掌握Swift。这本书可能包含了基础到进阶的所有内容,包括如何构建实际应用、使用Swift进行iOS开发的流程、Swift UI设计、Xcode...

    Swift闭包学习

    Swift闭包是编程语言中的一个核心特性,尤其在iOS应用开发中扮演着至关重要的角色。闭包(Closure)可以理解为一段能够捕获并存储其所在上下文中变量的代码块,它可以作为参数传递,也可以作为返回值。在Swift中,...

    Swift 中的闭包和 Objective-C 中的Block

    首先,让我们从Swift的闭包开始。闭包在Swift中是一种强大的工具,它允许我们将一段代码包装起来作为一个独立的实体,可以在程序的任何地方传递和调用。闭包可以捕获和存储其所在上下文中的常量和变量,这被称为...

    Swift视频教程 基础语法系列 闭包表达式语法

    在这个“Swift视频教程 基础语法系列 闭包表达式语法”中,我们将深入探讨Swift中的一个重要概念——闭包。闭包在Swift编程中扮演着至关重要的角色,因为它们允许我们封装可执行的代码块,并可以在程序的不同位置按...

    Swift之闭包ClosureDemo

    Swift中的闭包是一种强大的编程概念,它允许我们定义一段可移动和可重用的代码块,可以在函数中作为参数传递,...通过实践和学习"Swift之闭包ClosureDemo",你将能够更好地掌握这一关键概念,并将其应用到实际项目中。

    Swift视频教程 基础语法系列 闭包单行间接返回

    Swift是一种由Apple开发的编程语言,它被广泛用于iOS、macOS、watchOS...在学习过程中,通过观看“Swift视频教程 基础语法系列 闭包单行间接返回”,你将对这一核心概念有更深入的理解,从而更好地应用在实际项目中。

    Swift语言采用Closure闭包进行传值Demo

    在Swift中,Closure(闭包)是一种强大的功能,可以捕获和存储其所在上下文中的引用。本Demo通过闭包展示了在两个视图控制器之间如何实现反向传值,这与Objective-C(OC)中的Blocks概念有相似之处,但也有其独特之...

    swift_函数和闭包

    在Swift中,函数和闭包是核心概念,它们允许程序员组织代码并重复使用逻辑。本篇文章将深入探讨Swift中的函数和闭包。 **函数** 函数是执行特定任务的一段可重用代码。在Swift中,你可以通过定义函数来创建自己的...

    swift菜鸟入门视频教程-07-闭包

    在这个“Swift菜鸟入门视频教程-07-闭包”中,我们将深入探讨Swift中的一个重要概念——闭包。闭包在编程中是一种功能强大且灵活的工具,它允许我们定义可存储和传递的匿名函数。 闭包在Swift中的基本概念: 1. **...

    Swift视频教程 基础语法系列 闭包sorted函数

    本视频教程聚焦于Swift的基础语法,特别是闭包和`sorted`函数的使用,这是Swift编程中至关重要的概念。 闭包是Swift中的一个核心特性,它允许你定义一段可传递的代码块。闭包可以捕获并存储其所在上下文的常量和...

    swift学习笔记

    这篇学习笔记主要涵盖了Swift的基础知识和关键特性,旨在帮助初学者理解并掌握这种现代、强大且易读的语言。 一、Swift语言基础 Swift的语法简洁明了,易于理解。它引入了类型推断,使得编写代码时可以减少冗余的...

    Swift编程语言中函数与闭包的详细介绍及实战应用

    内容概要:本文详细介绍了Swift编程语言中的函数与闭包概念,包括函数的基础用法(声明与调用、参数与返回值)、函数类型与变量、内嵌函数与函数链、闭包的概念及其各种高级用法(尾随闭包、隐式返回闭包、捕获列表...

    IOS开发-Swift-基础知识学习笔记

    本学习笔记将深入探讨Swift的基础知识,帮助初学者快速掌握这一强大的工具。 一、Swift简介 Swift是由Apple在2014年WWDC(全球开发者大会)上推出的,旨在提高开发效率和代码安全。它吸收了Objective-C的优点,同时...

    (Swift)闭包作为属性

    在Swift编程语言中,闭包(Closure)是一种强大的特性,它可以捕获和存储上下文中的变量,这使得闭包能够灵活地处理数据。当我们说"闭包作为属性"时,这意味着我们将一个闭包赋值给类或结构体的实例变量,从而让这个...

    iOS开发 swift语言入门 学习资料

    从Apple官方的“Swift Playgrounds”应用到各种在线教程和书籍,如《Swift编程语言》(The Swift Programming Language)官方指南,都提供了详细的学习路径。通过这些资源,你可以逐步了解并掌握变量与常量、控制流...

    Swift学习demo.zip

    本资源“Swift学习demo.zip”包含了多个关键概念,旨在帮助初学者掌握Swift的基础知识。以下是这些概念的详细解释: 1. **闭包(Closures)** 闭包是一种能够捕获和存储其所在上下文中的变量的匿名函数。Swift中的...

    Swift视频教程 基础语法系列 闭包参数类型推断

    2. **上下文类型推断**:在函数或方法的参数中使用闭包时,如果闭包的参数类型可以从上下文推断出来,那么可以省略类型。比如`Array.sort(by:)`方法中的排序闭包,Swift可以根据`Array`的元素类型推断出闭包的参数...

    Swift从入门到精通视频教程下载第10章 程序功能的核心——函数和闭包.zip

    通过深入学习本章节的视频教程,你将掌握如何在Swift中有效地利用函数和闭包,提高你的编程能力,更好地理解和编写复杂的程序逻辑。在实际开发中,函数和闭包是构建高效、可维护的代码的关键工具,对于iOS应用开发...

    Swift5.2 Block(闭包)

    Swift中的闭包(Block)是编程语言中一种强大的特性,它允许我们定义并存储一段可调用的代码块。在Swift 5.2版本中,闭包的使用和理解仍然是开发者掌握Swift的关键部分。闭包可以捕获和存储上下文中的变量,这使得...

Global site tag (gtag.js) - Google Analytics