swift-闭包(代码块)
语法
通用的语法
{(parameters) -> return type in
statements
}
e.g
let studname = { println("Welcome to Swift Closures") }
studname()
输出
Welcome to Swift Closures
以下闭包接受两个参数并返回一个布尔值:
{(Int, Int) -> Bool in
Statement1
Statement
---
Statement n
}
e.g
let divide = {(val1: Int, val2: Int) -> Int in
return val1 / val2
}
let result = divide(, )
println (result)
输出
e.g
func ascend(s1: String, s2: String) -> Bool {
return s1 > s2
}
let stringcmp = ascend("swift", "great")
println (stringcmp)
输出
true
e.g
let sum = {(no1: Int, no2: Int) -> Int in
return no1 + no2
}
let digits = sum(, )
println(digits)
输出
sorted比较e.g
let count = [, , -, , ]
var descending = sorted(count, { n1, n2 in n1 > n2 })
var ascending = sorted(count, { n1, n2 in n1 < n2 }) println(descending)
println(ascending)
输出
[, , , , -]
[-, , , , ]
已知类型的闭包
考虑两个数相加。我们知道相加后将返回整数数据类型。因此,已知类型的闭包声明
let sub = {(no1: Int, no2: Int) -> Int in
return no1 - no2
}
let digits = sub(, )
println(digits)
-
声明简写参数名称作为闭包
Swift 自动提供简写参数名内联闭包, 可以使用由 $0,$1,$2 等等名称,指的是封闭的参数值。
var shorthand: (String, String) -> String
shorthand = { $ }
println(shorthand("", ""))
Swift 方便用户来表示内嵌闭包为缩写参数名为:$0, $1, $2 --- $n.
闭包参数列表中被省略定义部分,当我们表示内部闭包表达式简写参数名。 根据函数类型简写参数名称将被导出。由于简写参数表达体所定义的 'in' 关键字被省略。
闭包作为操作函数
let numb = [, -, -, , , ]
var sortedNumbers = numb.sorted({
(left: Int, right: Int) -> Bool in
return left < right
})
let asc = numb.sorted(<)
println(asc)
[-, -, , , , ]
闭包作为尾随包
reversed = sorted(names) { $ > $}
其中 {$0 > $1} 表示为外部(名称)声明尾随闭包。
import Foundation
var letters = ["North", "East", "West", "South"] let twoletters = letters.map({ (state: String) -> String in
return state.substringToIndex(advance(state.startIndex, )).uppercaseString
})
let stletters = letters.map() { $.substringToIndex(advance($.startIndex, )).uppercaseString }
println(stletters)
[NO, EA, WE, SO]
捕获值和引用类型
在闭包的帮助下 Swift 完成捕捉常量和变量的值。它还参考修改值,即使常量和变量在闭包体已经不存。
let decrem = calcDecrement(forDecrement: )
decrem()
在这里,oneDecrement 和 递减变量都指向同一个内存块闭合参考。
func calcDecrement(forDecrement total: Int) -> () -> Int {
var overallDecrement =
func decrementer() -> Int {
overallDecrement -= total
println(overallDecrement)
return overallDecrement
}
return decrementer
}
let decrem = calcDecrement(forDecrement: )
decrem()
decrem()
decrem()
swift-闭包(代码块)的更多相关文章
- Ruby 中的闭包-代码块
看了一片文章https://ruby-china.org/topics/38385讲closure的. 写下一些感想: 闭包就是 一个函数能够记住和存取它的lexical作用域,即使这个函数是在它的l ...
- swift - 快速代码块 - 创建 tableview等一些控件 基本属性
1.创建tableview private lazy var cellId = "cellId" fileprivate lazy var tv : UITableView = { ...
- swift闭包 notes http://www.gittielabs.com
Swift Closureshtml, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirror- ...
- 学习swift从青铜到王者之swift闭包06
语法表达式 一般形式:{ (parameters) -> returnType in statements } 这里的参数(parameters),可以是in-out(输入输出参数),但不能设定 ...
- 【swift】BlockOperation和GCD实用代码块
//BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...
- Swift闭包概念与常见使用场景总结
·Swift 闭包 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些 ...
- swift闭包-备
我给Swift 中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式.函数参数和函数返回值,闭包表达式的运算结果是一种函数类型. Swift中的闭包类似于Objective-C中的代码块.J ...
- Ruby学习之代码块
代码块在其他的语言中都或多或少接触过一些,如perl中sort{$a<=>$b}keys,传入代码块实现按数值排序,在swift中用到闭包,更加深入学习到training closure. ...
- swif(六)swift闭包
// // main.swift // LessonSwiftSix // // Created by keyan on 15/9/13. // Copyright (c) 2015年 keyan. ...
- iOS开发系列--Objective-C之协议、代码块、分类
概述 ObjC的语法主要基于smalltalk进行设计的,除了提供常规的面向对象特性外,还增加了很多其他特性,这一节将重点介绍ObjC中一些常用的语法特性.当然这些内容虽然和其他高级语言命名不一样,但 ...
随机推荐
- Burp Suite使用详解一
本文由阿德马翻译自国外网站,请尊重劳动成果,转载注明出处 Burp Suite是Web应用程序测试的最佳工具之一,其多种功能可以帮我们执行各种任务.请求的拦截和修改,扫描web应用程序漏洞,以暴力破解 ...
- css中的负边距
css中的负边距(negative margin)是布局中的一个常用技巧,只要运用得合理常常会有意想不到的效果.很多特殊的css布局方法都依赖于负边距,所以掌握它的用法对于前端的同学来说,那是必须的. ...
- 在WPF中使用WinForm控件方法
1. 首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dll,System.Windows.Forms.dll. 2. 在要使用WinForm控 ...
- linux Mint 安装tomcat8
先安装jdk,由于我这以安装jdk这里就不做详细描述: 到官网下载和自己jdk对应版本的tomcat包(tomcat.apache.org) 解压tomcat包到/opt/tomcat8下 tar - ...
- C#夯实基础之多线程二:主线程、前台线程与后台线程
我们在<C#夯实基础之多线程一:初识多线程>一文中第二部分中指出,既然windows最终发展出了多线程模型,按理说,我们直接使用一个.NetFramework的线程类就可以直接撸代码了,但 ...
- curl及postman专题
一. 步骤 1: 下载cURL工具 使用您的Windows机器从cURL web站点下载最新版本的cURL: (1) 通常情况下,多数的Windows用户可以从官网下载页面http://curl.ha ...
- erlang 健壮性
erlang 提供了简单易用的并发编程模型,基本不需要再考虑多线程并发问题.但实际应用中并不是那么的完美,很多地方需要注意,就算标准库也有不少问题.很多在多线程编程中很多很容易解决的事情,在erlan ...
- 下载旧版本的NDK
在官网找不到旧版本的下载地址,只能取巧了. 写该随笔的时候,NDK最新的版本是r12,见 https://developer.android.com/ndk/downloads/index.html# ...
- access基本操作(c#操作,远程连接,执行sql,加密,备份)
前言 最近项目用到了access,是的就是access,工作在桌面型的小数据库应用还是会用到的,如果你确定永远不会遇到access的操作,请忽略此篇文章 1.vs配置access 既然是数据库,就少不 ...
- 网络请求 __ NSURLSession
首先配置into.plist文件 1. 添加 App Transport Security Settings , Type栏自动变为Dictionary 2. 点击左边箭头,使之向下,点击右边加号,添 ...