无法将类型“([AnyObject]!,NSError!)-> Void”的值转换为期望参数类型“CLGeocodeCompletionHandler”

Posted

技术标签:

【中文标题】无法将类型“([AnyObject]!,NSError!)-> Void”的值转换为期望参数类型“CLGeocodeCompletionHandler”【英文标题】:Cannot convert value of type '([AnyObject]!, NSError!) -> Void' to expect argument type 'CLGeocodeCompletionHandler' 【发布时间】:2016-07-11 08:02:29 【问题描述】:

我想跳过去使用 Xcode 7.3.1 并转换我的代码,但我在这里遇到了一些问题,这就是我过去在 Swift 1.1 中使用它的方式,但我遇到了错误:

(又名“(可选>,可选)->()”):

这是我的代码:

  private func geoCodeAddress(address:NSString)

    let geocoder = CLGeocoder()
    geocoder.geocodeAddressString(address as String, completionHandler: (place marks: [AnyObject]!, error: NSError!) -> Void in ---> Error //Cannot convert value of type '([AnyObject]!, NSError!) -> Void' to expect argument type 'CLGeocodeCompletionHandler' (aka '(Optional<Array<CLPlacemark>>, Optional<NSError>)-> ()')

        if (error != nil)                 
            self.geocodingCompletionHandler!(gecodeInfo:nil,placemark:nil,error: error.localizedDescription)                
        
        else

            if let placemark = placemarks?[0] as? CLPlacemark 

                var address = AddressParser()
                address.parseAppleLocationData(placemark)
                let addressDict = address.getAddressDictionary()
                self.geocodingCompletionHandler!(gecodeInfo: addressDict,placemark:placemark,error: nil)
            
            else 
                self.geocodingCompletionHandler!(gecodeInfo: nil,placemark:nil,error: "invalid address: \(address)")                    
            
        
    )

【问题讨论】:

【参考方案1】:

如错误消息中所述,CLGeocodeCompletionHandler 返回可选的不是具体对象,因此只需将 completionHandler 代码更改为

geocoder.geocodeAddressString(address, completionHandler: (placemarks: [CLPlacemark]?, error: NSError?) -> Void in

)

【讨论】:

以上是关于无法将类型“([AnyObject]!,NSError!)-> Void”的值转换为期望参数类型“CLGeocodeCompletionHandler”的主要内容,如果未能解决你的问题,请参考以下文章

C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable

无法将类型“[PHAsset]”的值分配给类型“UIImageView!”

无法将 [Struct] 类型的值快速转换为 [string] 类型

无法将类型“()”的值转换为预期的参数类型“字符串”

无法将“字符串”类型的值转换为预期的参数类型 [任何]

无法将值类型“()”分配给字符串类型?