sort(&array[T],isOrderdBefore:(T,T)->Bool) [C.Generator.Element] sorted(source C,isOrderdBefore(C.Generator.Element,C.Generator.Element)->Bool)
func status(lhs:Int,rhs:Int)->Bool{ return lhs < rhs } sort(&array,status) array.description这里,我们传入一个函数类型
sort(&array,{(lhs:Int,rhs:Int)->Bool in return lhs < rhs}) array.description这里我们使用到了闭包
{(rhs:Int,rhs:Int)->Bool in return lhs < rhs}
sort(&array[T],isOrderdBefore:(T,T)->Bool)所以,编译器可以猜出闭包表达式中的类型是和数组的类型一致的,也就是说,在本文的例子中
sort(&array,{lhs,rhs in return lhs < rhs})
sort(&array,{lhs,rhs in lhs < rhs})
sort(&array,{$0 < $1})
sort(&array,<)
sort(&array){$0 < $1}
class CSND{ lazy var myname = "hwc" func myprint(method:(input:String)->()){ method(input:"hello") } } var object = CSND() object.myprint{ var result = $0 + " hwc" println(result) }这里myprint的参数唯一,并且只是一个函数类型,所以我们可以传入闭包表达式
func method(){ var temp = 10 func addOne(){ temp = temp + 1 } addOne() addOne() println(temp) }可以看到最后打印的值是12,也就是说,每次捕获到addOne函数中的temp是引用,而不是副本
func CreateMethod()->(Int)->(Int) { var result = 0 func toReturnMethod(input:Int)->(Int){ result = result + input return result } }函数CreateMethod创造一个函数,(Int)->(Int) 这个函数捕获result,然后加上input,后返回
var function = CreateMethod() var result = function(input:10) result = function(input:10) result = function(input:10)
最后result = 30
说明swift仍然替我们保存了我们想要的那个局部变量result
func CreateMethod()->(Int)->(Int) { var result = 0 func toReturnMethod(input:Int)->(Int){ return result + 5 } return toReturnMethod}
var function1 = CrethodMethod() var function2 = function1
//这里 function1和function2都是闭包类型,他们指向同一块内存
五、GCD与UIView实例
UIView.animateWithDuration(1.0,animations:{ //动作 },completion:{status in //status代表动作是否成功 //动作结束后的执行 }) 也可以这么写 UIView.animateWithDuration(1.0,animations:{ //动作 }){status in //status代表动作是否成功 //动作结束后的执行 }
GCD的例子太多了,用之前写过的单例作为例子
关于swift中GCD的的使用,会在下周更新教程
class hwcSingleton { var testVariable:Int! func print(){ testVariable = testVariable + 1 println(testVariable) } class var sharedObject: hwcSingleton { struct StaticStruct { static var predicate : dispatch_once_t = 0 static var instance : hwcSingleton? = nil } dispatch_once(&StaticStruct.predicate) { StaticStruct.instance = hwcSingleton() StaticStruct.instance?.testVariable = 10 } return StaticStruct.instance! } }g