为什么swift编译器不接受下面的映射闭包
let coords = ["5.691663622856139,45.11744852318003","5.691341757774353,45.11710783320859"]
let nodes = coords.map({
let latlon = $0.componentsSeparatedByString(",")
let lon = Double(latlon[0])!
let lat = Double(latlon[1])!
return CLLocation(latitude: lat, longitude: lon)
})
cannot invoke map with an argument list of type (@noescape (String) throws -> _)
然而
let nodes:[CLLocation] = coords.map({
let latlon = $0.componentsSeparatedByString(",")
let lon = Double(latlon[0])!
let lat = Double(latlon[1])!
return CLLocation(latitude: lat, longitude: lon)
})
工作良好。
Swift编译器(仍然)在使用简写参数进行"复杂"闭包的类型推理时会感到困惑,需要以下方面的帮助:
let coords = ["5.691663622856139,45.11744852318003","5.691341757774353,45.11710783320859"]
let nodes = coords.map() {
(stringCoordinates: String) -> CLLocation in // <- Just specify input/output
let latlon = stringCoordinates.componentsSeparatedByString(",")
let lon = Double(latlon[0])!
let lat = Double(latlon[1])!
return CLLocation(latitude: lat, longitude: lon)
}