Swift 语法 - 闭包
Swift syntax - closures
我有点难以在 SWIFT 中为此函数构建一个调用
func addressFromLocation(location:CLLocation!, completionClosure:((NSDictionary?)->())){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
var geoCoder = CLGeocoder()
geoCoder.reverseGeocodeLocation(location, completionHandler: { (placeMarks, error) -> Void in
if let places = placeMarks {
var marks = places[0] as! CLPlacemark
completionClosure(marks.addressDictionary)
}else {
completionClosure(nil)
}
})
})
}
有人可以帮忙吗?
首先,您可以从completionClosure
参数类型中删除不必要的括号:
func addressFromLocation(location: CLLocation!, completionClosure: NSDictionary? -> ()){
//...
}
你可以这样调用这个函数:
addressFromLocation(location, completionClosure: {
dict in
// your code
})
或者更简单,因为如果闭包是函数的最终参数,那么您可以使用尾随闭包语法:
addressFromLocation(location) {
dict in
// your code
}
如果你不需要命名参数dict
那么你可以通过编号引用参数:
addressFromLocation(location) {
print([=13=])
}
我有点难以在 SWIFT 中为此函数构建一个调用
func addressFromLocation(location:CLLocation!, completionClosure:((NSDictionary?)->())){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
var geoCoder = CLGeocoder()
geoCoder.reverseGeocodeLocation(location, completionHandler: { (placeMarks, error) -> Void in
if let places = placeMarks {
var marks = places[0] as! CLPlacemark
completionClosure(marks.addressDictionary)
}else {
completionClosure(nil)
}
})
})
}
有人可以帮忙吗?
首先,您可以从completionClosure
参数类型中删除不必要的括号:
func addressFromLocation(location: CLLocation!, completionClosure: NSDictionary? -> ()){
//...
}
你可以这样调用这个函数:
addressFromLocation(location, completionClosure: {
dict in
// your code
})
或者更简单,因为如果闭包是函数的最终参数,那么您可以使用尾随闭包语法:
addressFromLocation(location) {
dict in
// your code
}
如果你不需要命名参数dict
那么你可以通过编号引用参数:
addressFromLocation(location) {
print([=13=])
}