Обновленный учебник Ray Wenderlich MapKit до XCode 7 ошибка mkplacemark

Я только что обновил учебник Ray Wenderlich MapKit до ошибки XCode 7 для MKPlacemark. Я все еще только начинаю с кодированием, и я не уверен на 100%, с чего начать, как исправить эту ошибку. Я искал, но узнать безрезультатно.

Спасибо за любую помощь. Это высоко ценится.

http://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorial

Это код, с которым я получаю сообщение об ошибке:

// annotation callout opens this mapItem in Maps app
func mapItem() -> MKMapItem {
    let addressDict = [String(kABPersonAddressStreetKey): self.subtitle]
    let placemark = MKPlacemark(coordinate: self.coordinate, addressDictionary: addressDict)

    let mapItem = MKMapItem(placemark: placemark)
    mapItem.name = self.title

    return mapItem

Ошибка:

Невозможно вызвать инициализатор для типа "mkplacemark" с аргументом типа списка "координата:CLLocationCoordinate2D, addressDictionary:[String: String?])"

Еще раз спасибо,

Travis.

2 ответа

Вам нужно привести ваш субтитр как AnyObject, как показано ниже:

let addressDict = [String (kABPersonAddressStreetKey): self.subtitle as! AnyObject]

и ваш полный код для "func mapItem() -> MKMapItem { }" будет:

func mapItem() -> MKMapItem {
    let addressDict = [String(kABPersonAddressStreetKey): self.subtitle as! AnyObject]
    let placemark = MKPlacemark(coordinate: self.coordinate, addressDictionary: addressDict)

    let mapItem = MKMapItem(placemark: placemark)
    mapItem.name = self.title

    return mapItem
  }

ХОРОШО!

Просто понял, что я искал глубже!

Проблема заключается в том, что locationName является необязательным, поэтому атрибут addressDictionary имеет тип [String:String?], Который несовместим с инициализатором. Но словарь типа [String:String] будет работать.

Таким образом, вы можете заменить эту строку:

let addressDictionary = [String(CNPostalAddressStreetKey): subtitle]

С этим:

let addressDictionary = [String(CNPostalAddressStreetKey): subtitle!]

Или это (что эквивалентно с учетом реализации субтитров):

let addressDictionary = [String(CNPostalAddressStreetKey): locationName]

Спасибо!!!

Другие вопросы по тегам