2

这段代码出现两个错误:

“找不到类型 'MKPlacemark' 的初始化程序,它接受类型为'(坐标:CLLocationCoordinate2D,addressDictionary:[NSString:String])'的参数列表

“不能使用类型为'(String,completionHandler:([AnyObject?]!,NSError?)-> _)'的参数列表调用'geocodeAddressstring'

我试图在这里和那里放置选项,并阅读它可能会解决问题,但没有奏效。

我应该对我的代码进行哪些更改以修复这些错误并使我的 ViewController 工作?

import UIKit
import CoreLocation
import AddressBook
import Contacts
import MapKit

class ViewController: UIViewController {

    @IBOutlet weak var address: UITextField!
    @IBOutlet weak var city: UITextField!
    @IBOutlet weak var province: UITextField!
    @IBOutlet weak var zip: UITextField!

    var coords: CLLocationCoordinate2D?

    @IBAction func getDirections(sender: UIButton) {

        let geoCoder = CLGeocoder()

        let addressString = "\(address.text) \(city.text) \(province.text) \(zip.text)"

        geoCoder.geocodeAddressString(addressString, completionHandler: {(placemarks: [AnyObject?]!, error: NSError?) in

            if error != nil {

                print("Geocode failed with error: \(error?.localizedDescription)")

            } else if placemarks?.count > 0 {

                let placemark = placemarks[0] as! CLPlacemark
                let location = placemark.location
                self.coords = location.coordinate

                self.showMap()
            }
        })
    }


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    func showMap() {
        let addressDict =[kABPersonAddressStreetKey as NSString: address.text!,
            kABPersonAddressCityKey: city.text!,
            kABPersonAddressStateKey: province.text!,
            kABPersonAddressZIPKey: zip.text! ]

        let place = MKPlacemark(coordinate: coords!, addressDictionary: addressDict)
        let mapItem = MKMapItem(placemark: place)
        let options = [MKLaunchOptionsDirectionsModeDriving]

        mapItem.openInMapsWithLaunchOptions(options)
    }
}
4

2 回答 2

3

你升级到swift 2.0了吗?

Swift 1.2 及之前

geoCoder.geocodeAddressString(addressString, completionHandler: {(placemarks: [AnyObject?]!, error: NSError?) in

斯威夫特 2.0

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

也改变

let placemark = placemarks[0] as! CLPlacemark

let placemark = placemarks[0]
于 2015-07-01T17:13:59.890 回答
-1

对于持续的 MKPlacemark 错误,请尝试更改

let place = MKPlacemark(coordinate: coords!, addressDictionary: addressDict)

let place = MKPlacemark.init(coordinate: coords!, addressDictionary: (addressDict as! [String:AnyObject]))
于 2015-09-24T18:54:25.990 回答