[swift学习之六]@autoClosure练习
2016-05-08 15:01
477 查看
<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 = ()-> String var 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存在的意义不是很大,多写点儿也可以接受啊。
还没有理解必须的使用场景,以后遇到再说吧~!
相关文章推荐
- swift 可选值
- 《Swift入门》ubuntu下编译运行Swift开发的Web后端示例
- Swift函数_inout参数
- Swift函数_外部参数名,
- 对照Java学习Swift--自动引用计数(Automatic Reference Counting)
- Swift 集成Alamofire/Kingfisher/MJRefresh/MBProgressHUD的小项目
- swift基础学习(04)[运算符、属性、属性观察器、方法、下脚标本、继承、构造器]
- swift基础学习(04)[闭包、函数、枚举、类和结构体]
- swift基础学习(03)[数组、集合、字典]
- swift基础学习(03)
- Swift解读专题二——基本类型
- 若干道Swift面试题
- 对照Java学习Swift--析构过程(Deinitialization)
- swift-struct
- Swift中把图片保存到相册
- 对照Java学习Swift--构造过程(Initialization)
- swift 新闻列表实现
- swift 新闻列表实现
- swift TabBar
- Swift-贝赛尔曲线实现画图板 && 截图保存到相册中