[swift学习之六]@autoClosure练习
来源:互联网 发布:python方法和函数 编辑:程序博客网 时间:2024/05/18 02:38
<pre name="code" class="plain">/*注意点: 1,return ANeed && ACanUseSum,只有前面为true的时候才计算后面,和其他语言一样~ 2,用函数的返回值作为实参的时候,肯定调用,如形式1; 3,用函数的体作为实参的时候,符合条件时调用,如形式2 4,函数闭包就是省的写oc中大扩号前面的部分了,如^BOOL()。 5,形参加入@autoclosure修饰后,都变成了{return ...}形式,即使传入的实参是一个变量。 6,@autoclosure只能修饰()->T 这样的形参。 都是个人理解啊,写错的还望指正~ *//*形式1,CaculateSum肯定会之行,即使前面的aneed为false*/func CaculateSum1()->Int{ print("调用了方法:CaculateSum1") return 20}func ShowResult1(ANeed:Bool,ACanUseSum: Bool) -> Bool { return ANeed && ACanUseSum}if ShowResult1(true, ACanUseSum: CaculateSum1() == 20){ print("ShowResult1")}/*形式2,传入闭包,前面的aneed为true的时候才之行。*/func CaculateSum2()->Int{ print("调用了方法:CaculateSum2") return 20}func ShowResult2(ANeed:Bool,ACanUseSum: ()->Bool) -> Bool { return ANeed && ACanUseSum()}if ShowResult2(true, ACanUseSum: {return CaculateSum2() == 20}){ print("ShowResult2")}/*形式3,@autoclosure作用凸显。和形式1的实参,和形式2的效果*/func CaculateSum3()->Int{ print("调用了方法:CaculateSum3") return 20}func ShowResult3(ANeed:Bool,@autoclosure ACanUseSum: ()->Bool) -> Bool { return ANeed && ACanUseSum()}if ShowResult3(false, ACanUseSum: CaculateSum2() == 20){ print("ShowResult3")}/*苹果官方文档对autoclosure的用法*/var customersInLine = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]let autofun = {customersInLine.removeAtIndex(0)}//()->string类型的闭包,没有执行。Count=5/*直接执行,Count=4*/autofun()/*作为参数,Count=3*/func RemoveObj(fun:()->String)->String{ return fun()}RemoveObj(autofun)/*@autoclosure加上,作为参数,Count=2*/func AutoRemoveObj(@autoclosure fun:()->String)->String{ return fun()}AutoRemoveObj(customersInLine.removeAtIndex(0))/*@autoclosure(escaping)用法 加上(escaping)后,不但能直接调用,还可以把函数先缓存起来,以后调用。*/typealias AutoFunType = ()-> Stringvar AutoFunctions = [AutoFunType]()func getWorld() -> String { return "World"}func addAutoFun(@autoclosure(escaping) fun:AutoFunType) -> Void { AutoFunctions.append(fun)}addAutoFun("Hello")addAutoFun(getWorld())print(AutoFunctions[0]() + AutoFunctions[1]())
Objective-C的相关练习部分
-(NSUInteger) fun1{ NSLog(@"fun1"); return 20;}-(BOOL)AddFun1:(BOOL)Afirst second:(BOOL) aSecond{ return Afirst && aSecond;}-(NSUInteger) fun2{ NSLog(@"fun2"); return 20;}-(BOOL)AddFun2:(BOOL)Afirst second:(BOOL(^)()) aSecond{ return Afirst && aSecond();}-(NSUInteger) fun3{ NSLog(@"fun3"); return 20;}-(BOOL)AddFun3:(BOOL)Afirst second:(TestClosure) aSecond{ return Afirst && aSecond();}- (void)viewDidLoad { /*第一种:肯定之行fun1,不管afirst是否为yes*/ [self AddFun1:NO second:[self fun1] == 20]; /*第二种:Afirst==yes才执行fun2*/ [self AddFun2:NO second:^BOOL{ return [self fun2] == 20; }]; /*第三种:和第二种效果一样*/ TestClosure tfun = ^BOOL(){ return [self fun3] == 20; }; [self AddFun3:NO second:tfun]; [super viewDidLoad];}个人觉得@autoClosure存在的意义不是很大,多写点儿也可以接受啊。
还没有理解必须的使用场景,以后遇到再说吧~!
0 0
- [swift学习之六]@autoClosure练习
- Swift学习之每日一tip (5)@autoclosure
- Swift之自动闭包(@autoclosure、@noescape、@escape)
- swift 学习<六> 闭包练习
- [swift学习之二]基本语法练习
- [swift学习之三]枚举练习
- [swift学习之四]结构体练习
- [swift学习之五]类练习
- [swift学习之八]泛型练习
- [swift学习之十]扩展语法练习
- [swift学习之十一]协议语法练习
- [swift学习之十二]二维码创建练习
- [swift学习之十三]二维码扫描练习
- [swift学习之十五]指针练习
- [swift学习之十六]RunTime练习一
- [swift学习之十七]RunTime练习二
- 使用@autoclosure提高Swift代码质量
- [绍棠_Swift] Swift中的@noescape @escaping @autoclosure
- C语言中const的用法
- Problem3-1004
- CPU的内部架构和工作原理
- 获取HTTP信息
- svn服务器相关
- [swift学习之六]@autoClosure练习
- 数据库分页查询报错:ORA_00923:column ambiguously defined 某列定期模糊
- 【C/C++】printf 格式化输出
- php上传大文件时出现错误
- 找出key在有序数组中出现的次数
- Linux文件权限详解
- 深入理解Java类加载
- 最大公约数2
- js动态改变iframe高度自适应