Swift语法简介(二)闭包
突然看到别人写的关于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语法简介(二)闭包的更多相关文章
- Swift语法简介(一)
或许网络上有很多成型的介绍,我只想写下来留给自己.欢迎批评.开撸! 1.第一个程序,Hello,world!古人云,学会了Hello,world!这门语言你就掌握了一半了. print("H ...
- Swift数据类型简介(二)
整数 整数就是没有小数部分的数字,比如42和-23.整数可以是有符号(正.负.零)或者无符号(正.零). Swift 提供了8,16,32和64位的有符号和无符号整数类型.这些整数类型和 C 语言的命 ...
- Azure Bicep(二)语法简介
一,引言 上一篇文章有介绍到 Azure Bicep 的部署问题,文中也只是演示部署范围为 Sub,并将演示的 Azure Resource Group 到 Azure.给定 Bicep 文件,可以部 ...
- ios -- 教你如何轻松学习Swift语法(二)
前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦. 一.可选类型(重点内容) 1.什么是可选类型? 1.1在OC开 ...
- Swift语法基础入门三(函数, 闭包)
Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...
- Swift语法基础入门二(数组, 字典, 字符串)
Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...
- ios -- 教你如何轻松学习Swift语法(三) 完结篇
前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦. 一.自动引用计数 1.自动引用计数工作机制 1.1 swift和o ...
- 窥探Swift之函数与闭包的应用实例
今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小实 ...
- Swift语法入门
正文参考: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Progra ...
随机推荐
- Web 项目中分享到微博、QQ空间等分享功能
Web 项目中分享到微博.QQ空间等分享功能 网上有很多的模板以及代码,但是有很多都不能分享内容,简单的测试了下: 以新浪微博为例,文本框中的内容是title属性,下面的链接是url属性,如果你的链接 ...
- C# basic
1. output Console.WriteLine("hello world"); 2. naming convention variable: start with lowe ...
- OpenLDAP,一登录系统就修改密码
http://guodayong.blog.51cto.com/263451/d-2 郭大勇的博客 1:修改配置文件 在前面打开注释 moduleload ppolicy.la modulepat ...
- Android中Http加载如何得到Cookie和 WebView 加载网页如何得到的Cookie
最近做项目在手机端登录Http请求和 WebView 记载登录获取Cookie信息,可查看Cookie信息. 如图: Http请求获取Cookie信息: public static String re ...
- 转载 --ios 模型-setValuesForKeysWithDictionary
应用场景:app请求后端数据,返回的数据是JSON形式,如: { "is_favor" = 0; "is_follow" = 0; "is_prais ...
- Android的setVisibility(View.GONE)无效的问题及原因分析
出现这种情况很可能是因为设置了animation,并且调用了setFillAfter(true),这就会导致setVisibility无效,只需要调用一下clearAnimation()方法或者去掉s ...
- Fresco支持的URIs
//远程图片public void httpBtnOnClick(View view) { //网络图片URL String path = "http://p4.so.qhimg.com/t ...
- 4.代码同时托管到github和git.oschina.net
我的开源项目托管在Github,同时在Git@OSC也有备份,有两个地方,是不是很麻烦呢?非也非也,下面介绍一下我是怎么做的. 1.先在Github新建一个项目,点击Github主页右上角的加号 -& ...
- Android进程间的通信之AIDL
Android服务被设计用来执行很多操作,比如说,可以执行运行时间长的耗时操作,比较耗时的网络操作,甚至是在一个单独进程中的永不会结束的操作.实现这些操作之一是通过Android接口定义语言(AIDL ...
- python 正则re模块
re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词. import re text = "JGood is a handsome boy, he ...