作者:星晚
链接:https://www.zhihu.com/question/24002984/answer/108694231
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我真心觉得swift有时挺恶心的,理由只是因为Chris Lattner这货让我感觉真的有时是完完全全处于脑洞大开的状态,如果是想要学习swift的,学习成本那真的是,唉~~~:就拿数组Array和闭包Closure这两货举个例(不建议各位以数字进行命名,下面只是图方便)😕/ 定义数组的几种形式
var array1 = Array()
var array2 : Array = Array()
var array3 : Array = Array()
var array4 : Array = Array()
var array5 : Array = Int
var array6 : [Int] = Array()
var array7 : [Int] = Int
var array8 = [1, 2, 3, 4]
写完我就呵呵了。。。因为swift这种灵活性简直令人发指,很多其他语言都会尽量去固定语法格式,这种能写出这么多形式的,也许也挺好的不是,但学习成本嗖嗖的,你永远不知道别人会写出什么形式的代码出来啊摔!!!后来我遇到了闭包这货,唉,以下全称一个闭包的减肥之路:
func greatorFun2(x : Int,y : Int) -> Bool {
return x > y
}
paopaoSort(&data,function : greatorFun2)
//调用写成闭包
paopaoSort(&data) { (x : Int, y : Int) -> Bool in
return x > y
}
//首先可以省略参数的类型
paopaoSort(&data) { (x , y ) -> Bool in
return x > y
}
// 然后返回值类型可以省略
paopaoSort(&data) { (x , y ) in
return x > y
}
// 再则,当只有一行闭包代码 return 都可以省略掉
paopaoSort(&data) { (x , y ) in
x > y
}
你以为到这就结束了么,呵呵,还是太年轻了~你发现参数名也可以省略!!然后用“美金”来买通编译器让你通过,( $0 代表第一个参数 ,$1第二个参数)
paopaoSort(&data) {
$0 > $1
}
此处可以省略只有逻辑(只有一个符号)了,加上拖尾闭包的概念就成一个{>}这种东西了,我简直凌乱了好么。
//paopaoSort(&data) { > }
paopaoSort(&data, function: > )
过掉一天,你回来看代码一看我去这东西是啥?可读性不是一般的差,你可以保证自己不写这种简式的代码,但能保证别人不写?
真的swift太灵活了,这样真的很不好,之后希望苹果能做出改变,毕竟入了ios这坑,为了钱,我还是要学下去的,即时学习成本真的好高。