突然看到别人写的关于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. DataRow[]与DataTable的转换代码【精炼】

    Day_20170106 代码记录 //DataTable查询出DataRow[] DataRow[] drs = AllSysModuleDs.Tables[].Select(string.Form ...

  2. 初学c# -- 学习笔记(一)

    初学c# -- 学习笔记(一) 学习C#了,参考许多资料,一步步学习.这一段学习ajax的工作原理,参照其他例子写了web版的群聊小程序,全部文件代码也就不到300行,很简单.使用时先输入用户名,点确 ...

  3. 试一下CANVAS

    // 此应用源代码如下: document.getElementById("codetext").innerHTML = document.getElementById(" ...

  4. PHP用户名用星号处理

    PHP用户名用*号处理: 用户名:英文.中文.中英文混合的.中英文字符混合的 处理为:首字母和末尾保留,中间用*号代替(一个字符直接显示,两个字符:张*,三个以上字符:宋*丹) 首先判断字符中是否包含 ...

  5. xcode的类库报错,如何解决

    首先看一下自己报错的原因,是当前UIkit框架还是别的,然后按住Command+shift+G 把"/Applications/Xcode.app/Contents/Developer/Pl ...

  6. Javascript中DOM的练习

    第一个题:html计时器 方法一: <body onLoad="show()" > <div id="b"></div> & ...

  7. 安装YouCompleteMe

    1. from software center 1 $ apt-get install vim vim-youcompleteme vim-addon-manager 2 $ vam install ...

  8. 使用mysql 命令行,增加 ,删除 字段 并 设置默认值 及 非空

    使用mysql 命令行,增加 ,删除 字段 并 设置默认值 及 非空 添加 alter table table_name add field_name field_type; 添加,并设置默认值,及非 ...

  9. Android中脱离WebView使用WebSocket实现群聊和推送功能

    WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能.更多知识参考 ...

  10. 开始研究tigase和android客户端的实现

    2015.7.5. 昨晚总算把tigaase7.0的开发环境搭起来了.稍微看了下代码结构. 主要是auth,db,compnent,cluster,server,xmpp,这几块,准备先发点时间看看开 ...