swift回调不打印

时间:2015-03-15 01:01:32

标签: ios swift callback

我试着理解swift中回调的主要概念 我有以下代码:

typealias ImageHandler = (String,NSError?) -> Void

 func PostOnSocialMedia(image:String?){
    println(0)

    Post({(image)->Void in
     println(1)
    })

    println(2)
}

func Post(handler:ImageHandler){
    println(3)
}

我的代码输出是0,3,2我的问题是为什么不打印数字1。

1 个答案:

答案 0 :(得分:1)

它不打印1,因为你传入的函数从未被调用过。

此:

Post({ (image)->Void in
     println(1)
})

声明一个临时函数(一个“闭包表达式” - 一种快速简单的方法来声明匿名函数,在{ }之间),它接受一个(String,NSError?)对的参数,并且不返回任何内容。然后它将该函数传递给Post函数。

但是Post函数对它没有任何作用。要运行一个函数,需要调用它。如果您更改了Post功能,请执行以下操作:

func Post(handler:ImageHandler){
    println(3)

    // call the handler that was passed in...
    handler("blah",nil)
}

你会看到它打印1。

注意,image收到的PostOnSocialMedia参数和临时函数中的image参数变量是两个不同的变量 - 范围规则意味着在temp函数内声明的那个掩盖了一个在外部范围内。但它们非常不同(事实上,它们是不同的类型 - 一个是字符串,另一个是字符串的2元组和错误)。

尝试使用reading this获取Swift中一阶函数和闭包的简短介绍。