码迷,mamicode.com
首页 > 编程语言 > 详细

Swift语法简介(二)闭包

时间:2015-12-19 16:28:53      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

  突然看到别人写的关于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语法简介(二)闭包

标签:

原文地址:http://www.cnblogs.com/wulongt/p/5059173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!