有关闭包的定义:
typealias colsureName=(ParamClass,ParamClass?)->Void;
定义方法使用闭包时:
func colsureTestMethod:(colsureName):colsure;
eg:
//定义回调闭包
typealiasonSuccess=(MKNetworkOperation,String)->Void;
typealiasonError=(NSError)->Void;
//调用
privatefuncoperation_request(#urlstring:String,parmaDic:[String:String],httpMethod:String,onSucc:onSuccess,onErr:onError){
let op:MKNetworkOperation=MKNetworkOperation(URLString: urlstring, params: parmaDic, httpMethod: httpMethod);
op.addCompletionHandler({ (mop:MKNetworkOperation!) -> Void in
onSucc(mop,mop.responseString());
}, errorHandler: { (mop:MKNetworkOperation!, err:NSError!) -> Void in
onErr(err);
});
net_engine?.enqueueOperation(op);
}
方法内直接定义colsure并且为参数的用法:
funclogtrue(predicate:(Int,Int)->Int)->Bool{
var a = 100
var b = 101
return predicate(a,b)>a*b
}
输出结果:false
varflag = logtrue { (a:Int, c:Int) -> Int in
return a+c
}
关于@autoclosure
funclogbool(@autoclosurepredicate:()->Bool){
if predicate(){
print("true")
}else{
print("false")
}
}
用@autoclosure 定义的闭包,可以直接使用类似“logbool(2>1)” 的写法来使用 或者“
logbool({return2>1}())”的方法来使用,@autoclosure 只能用来定义无参数的闭包
funclogboolValue(predicate:()->Bool){
if predicate(){
print("true")
}else{
print("false")
}
}
logboolValue({return2>1})
相关文章
- 【面试题】三道面试题让你掌握JavaScript中的执行上下文与作用域以及闭包
- Python之修改闭包内使用的外部变量
- Python之闭包的使用
- swift 将闭包声明属性使用
- iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用
- kotlin中闭包的概念和原理
- 【授课录屏】JavaScript高级(IIFE、js中的作用域、闭包、回调函数和递归等)、MySQL入门(单表查询和多表联查)、React(hooks、json-server等) 【可以收藏】
- 聊一下JS中的作用域scope和闭包closure
- JavaScript 中的闭包和作用域链(读书笔记)
- Swift3.0 -- 闭包的循环引用与OC的对比