突然看到别人写的关于Block的帖子,让我突然有一种想写一篇关于闭包的帖子。在我的认知中,Swift中的闭包,就是Object-C中的Block--(或许我的认知太浅了)。先上一个闭包的简单例子

 let isInputEven = { (input:Int)->(Bool) in
if input % 2 == 0 {
return false
}
return true
}
print(isInputEven(3))

  上述代码定义了一个闭包,名字是 isInputEven。接收一个Int类型的参数,返回Bool类型,参数和返回值,都是在大括号里边写的,in后边写执行的内容。有Block经历的同学们,看这段代码应该不费力吧。后边的调用,就很简单了。跟C语言的函数类似。  

  闭包与Block不同的一点,Block内部如果需要改变Block外边定义的变量,需要在变量声明前加__block 修饰,而闭包可以任意修改外部变量,如下代码

var i = 3
let isInputEven = { (input:Int)->(Bool) in
i += 1
if input % 2 == 0 {
return false
}
return true
}
print(isInputEven(3))
print(i)

输出的结果是true   4

  Swift中,已经告别了Block,所有的系统代码都用闭包来实现。在使用的方式和Block无太大差异。下边给一个关于UIView动画的函数

UIView.animateWithDuration(0.5) { () -> Void in
self.view.backgroundColor = UIColor.redColor()
}
[UIView animateWithDuration:5.0f animations:^{view.opacity = 0.5f;}];

第一个是闭包,第二个是OC里的Block,是不是并无太大差异。如果参数和返回值并无任何使用,可以省略。上述代码可以写成

UIView.animateWithDuration(0.5) {
self.view.backgroundColor = UIColor.redColor()
}

需要一提的是,闭包里的变量,需要加上self.来告知这个View的归属。外加一句,控制器的View再OC中需要说明,self.view.而在Swfit中直接写view就是系统的view了。写到这里我就有多多少少的感触。从系统的角度,如果知道的事情,并不需要程序员来说明,大大提高了程序的友好度。

Swift语法简介(二)闭包的更多相关文章

  1. Swift语法简介(一)

    或许网络上有很多成型的介绍,我只想写下来留给自己.欢迎批评.开撸! 1.第一个程序,Hello,world!古人云,学会了Hello,world!这门语言你就掌握了一半了. print("H ...

  2. Swift数据类型简介(二)

    整数 整数就是没有小数部分的数字,比如42和-23.整数可以是有符号(正.负.零)或者无符号(正.零). Swift 提供了8,16,32和64位的有符号和无符号整数类型.这些整数类型和 C 语言的命 ...

  3. Azure Bicep(二)语法简介

    一,引言 上一篇文章有介绍到 Azure Bicep 的部署问题,文中也只是演示部署范围为 Sub,并将演示的 Azure Resource Group 到 Azure.给定 Bicep 文件,可以部 ...

  4. ios -- 教你如何轻松学习Swift语法(二)

    前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦.      一.可选类型(重点内容)   1.什么是可选类型?        1.1在OC开 ...

  5. Swift语法基础入门三(函数, 闭包)

    Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...

  6. Swift语法基础入门二(数组, 字典, 字符串)

    Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...

  7. ios -- 教你如何轻松学习Swift语法(三) 完结篇

    前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦.      一.自动引用计数   1.自动引用计数工作机制      1.1 swift和o ...

  8. 窥探Swift之函数与闭包的应用实例

    今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小实 ...

  9. Swift语法入门

    正文参考: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Progra ...

随机推荐

  1. arm_linux_dt

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/44862.aspx

  2. Python:XXX missing X required positional argument: 'self'

    代码的一个小小Bug有时候会让人焦头烂额,费了很大劲搞明白的问题,如果不记录下来,是很容易遗忘的! 定义一个类,如果按照以下的方式使用,则会出现TypeError: testFunc() missin ...

  3. TSkinData 皮肤控件后最大最小提示英文Close的解决方法

    1.D:\soft\控件\VclSkin5.40-D7-D2010 New\source 控件安装位置 2.WinSkinForm.pas 查找Close 3.function TWinSkinFor ...

  4. jquery动态删除html代码

    1.remove() remove()方法移除被选元素,包括所有的文本和子节点. 语法:$(selector).remove() 当我们想将元素自身移除时我们用 .remove(),同时也会移除元素内 ...

  5. Block回调

    •Block的定义   •Block.委托.通知.回调函数,它们虽然名字不一样,但是原理都一样,都是"回调机制"的思想的具体实现 •前面的代理模式的项目改为Block回调实现    ...

  6. SQL 查询性能优化----解决书签查找

    先来看看什么是书签查找: 当优化器所选择的非聚簇索引只包含查询请求的一部分字段时,就需要一个查找(lookup)来检索其他字段来满足请求.对一个有聚簇索引的表来说是一个键查找(key lookup), ...

  7. js中的一些容易混淆的方法!

    数组的一些方法: 1.join()和split()方法  与之相反的是split()方法:用于把一个字符串分割成字符串数组.  注意返回的数组中不包括separator本身: 提示和注释注释:如果把空 ...

  8. 更新CocoaPods

    终端输入 : sudo gem install -n /usr/local/bin cocoapods –pre 更新了CocoaPods后,在原来的工程中执行了pod install命令后,报这样的 ...

  9. memcached 分布式

    memcached定义 memcached 是一套分布式的高速缓存系统,被广泛应用于应用系统的缓存层来提升应用程序的访问速度:memcache缺乏认证以及安全管制,这表明应将memcached服务器放 ...

  10. react 写的省市三级联动

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Ba ...