当前位置: 首页 > news >正文

swift菜鸟教程14(闭包)

一个朴实无华的目录

  • 今日学习内容:
    • 1.Swift 闭包
      • 1.1闭包定义
      • 1.2闭包实例
      • 1.3闭包表达式
        • 1.3.1sorted 方法:据您提供的用于排序的闭包函数将已知类型数组中的值进行排序。
        • 1.3.2参数名称缩写:直接通过$0,$1,$2来顺序调用闭包的参数。
        • 1.3.3运算符函数
      • 1.4尾随闭包:书写在函数括号之后的闭包表达式
      • 1.5捕获值:嵌套函数可以捕获其外部函数所有的参数以及定义的常量和变量。

今日学习内容:

1.Swift 闭包

1.1闭包定义

闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。
在这里插入图片描述

1.2闭包实例

import Cocoa

let studname = { print("Swift 闭包实例。") }
studname()
import Cocoa

let divide = {(val1: Int, val2: Int) -> Int in 
   return val1 / val2 
}
let result = divide(200, 20)
print (result)

1.3闭包表达式

1.3.1sorted 方法:据您提供的用于排序的闭包函数将已知类型数组中的值进行排序。

返回一个与原数组大小相同,包含同类型元素且元素已正确排序的新数组。

import Cocoa

let names = ["AT", "AE", "D", "S", "BE"]

// 使用普通函数(或内嵌函数)提供排序功能,闭包函数类型需为(String, String) -> Bool。
func backwards(s1: String, s2: String) -> Bool {
    return s1 > s2
}
var reversed = names.sorted(by: backwards)

print(reversed)

以上程序执行输出结果为:

["S", "D", "BE", "AT", "AE"]

1.3.2参数名称缩写:直接通过$0,$1,$2来顺序调用闭包的参数。
import Cocoa

let names = ["AT", "AE", "D", "S", "BE"]

var reversed = names.sorted( by: { $0 > $1 } )
print(reversed)

1.3.3运算符函数
import Cocoa

let names = ["AT", "AE", "D", "S", "BE"]

var reversed = names.sorted(by: >)
print(reversed)

1.4尾随闭包:书写在函数括号之后的闭包表达式

import Cocoa

let names = ["AT", "AE", "D", "S", "BE"]

//尾随闭包
var reversed = names.sorted() { $0 > $1 }
print(reversed)

1.5捕获值:嵌套函数可以捕获其外部函数所有的参数以及定义的常量和变量。

incrementor实际上捕获并存储了该变量的一个副本,而该副本随着incrementor一同被存储。

所以我们调用这个函数时会累加

import Cocoa

func makeIncrementor(forIncrement amount: Int) -> () -> Int {
    var runningTotal = 0
    func incrementor() -> Int {
        runningTotal += amount
        return runningTotal
    }
    return incrementor
}

let incrementByTen = makeIncrementor(forIncrement: 10)

// 返回的值为10
print(incrementByTen())

// 返回的值为20
print(incrementByTen())

// 返回的值为30
print(incrementByTen())

如果您将闭包赋值给了两个不同的常量/变量,两个值都会指向同一个闭包:

import Cocoa

func makeIncrementor(forIncrement amount: Int) -> () -> Int {
    var runningTotal = 0
    func incrementor() -> Int {
        runningTotal += amount
        return runningTotal
    }
    return incrementor
}

let incrementByTen = makeIncrementor(forIncrement: 10)

// 返回的值为10
incrementByTen()

// 返回的值为20
incrementByTen()

// 返回的值为30
incrementByTen()

// 返回的值为40
incrementByTen()

let alsoIncrementByTen = incrementByTen

// 返回的值也为50
print(alsoIncrementByTen())

相关文章:

  • Java 解压 rar 文件
  • CSS属性书写顺序
  • wireshark过滤器表达式的规则
  • linux 定时器管理系统设计与实现
  • MySql主从相关概念
  • windows虚拟内存
  • 全局异常处理器的基本使用
  • JS-防抖与节流
  • 【STM32】解读启动文件startup_stm32f10x_md.s
  • Vue 大文件分片上传组件实现解析
  • 互联网三高-高性能之无锁编程
  • [蓝桥杯 2023 省 A] 平方差
  • CSS高度坍塌?如何解决?
  • 达梦数据库-学习-16-常用SQL记录(持续更新)
  • 【家政平台开发(36)】数据迁移与初始化开发:筑牢家政平台的数据根基
  • JavaScript 代码混淆与反混淆技术详解
  • 构建高可靠C++服务框架:从日志系统到任务调度器的完整实现
  • 定制一款国密浏览器(5):修改浏览器名称
  • Python 关键字详解
  • 超低功耗MCU软件开发设计中的要点与选型推荐
  • 广州技术支持 奇亿网站建设/专业恶意点击软件
  • 标书制作员这工作好吗/百度权重优化软件
  • 成都装修公司网站建设/网络软文写作
  • 网站制作的动画怎么做的/杭州搜索引擎推广排名技术
  • 什么网站可以发布有偿做项目/seo关键词布局案例
  • 东港建站公司/百度一下官网网址