为什么 swift 编译器不接受以下映射闭包



为什么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)
}

最新更新