openMapsWithItems не может вызывать проблему со списком аргументов в Swift 2.0

У меня есть несколько проблем с преобразованием моего кода Swift 1.2 в 2.0 - это одна из таких проблем.

У меня есть функция, которая открывает приложение iOS Maps, чтобы указать направление к местоположению. До переделки работал нормально. Теперь я получаю следующее сообщение об ошибке:

Cannot invoke 'openMapsWithItems' with an argument list of type '([MKMapItem], launchOptions: [NSObject : AnyObject])'

Это мой код (ошибка появляется в последней строке):

func openMapsWithDirections(longitude:Double, latitude:Double, placeName:String){

    var coordinate = CLLocationCoordinate2DMake(CLLocationDegrees(longitude), CLLocationDegrees(latitude))
    var placemark:MKPlacemark = MKPlacemark(coordinate: coordinate, addressDictionary:nil)
    var mapItem:MKMapItem = MKMapItem(placemark: placemark)
    mapItem.name = placeName
    let launchOptions:NSDictionary = NSDictionary(object: MKLaunchOptionsDirectionsModeDriving, forKey: MKLaunchOptionsDirectionsModeKey)
    var currentLocationMapItem:MKMapItem = MKMapItem.mapItemForCurrentLocation()

    MKMapItem.openMapsWithItems([currentLocationMapItem, mapItem], launchOptions: launchOptions as [NSObject : AnyObject])
}

Любые идеи? Спасибо.


person Adam Johnson    schedule 14.06.2015    source источник
comment
Объявите launchOptions как let launchOptions : [NSObject : AnyObject] = [MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving] и удалите as [NSObject : AnyObject]   -  person Kametrixom    schedule 14.06.2015
comment
Спасибо Kametrixom, но я все еще получаю следующую ошибку: «Не удается вызвать openMapsWithItems со списком аргументов типа ([MKMapItem], launchOptions: [NSObject: AnyObject])». Я очистил сборку на случай, если там была проблема, но она все еще не работает.   -  person Adam Johnson    schedule 14.06.2015


Ответы (1)


Как видно из предварительные ресурсы разработчиков для MKMapItem, openMapsWithItems:launchOptions: теперь изменились с [NSObject : AnyObject]! на [String : AnyObject]?, поэтому вам придется объявить (или применить) его как таковой.

Измените в своем коде строку

let launchOptions:NSDictionary = NSDictionary(object: MKLaunchOptionsDirectionsModeDriving, forKey: MKLaunchOptionsDirectionsModeKey)

to

let launchOptions = [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving]

и последняя строка

MKMapItem.openMapsWithItems([currentLocationMapItem, mapItem], launchOptions: launchOptions as [NSObject : AnyObject])

to

MKMapItem.openMapsWithItems([currentLocationMapItem, mapItem], launchOptions: launchOptions)

Это должно сработать.

Примечание. Вам следует изменить стиль кода, чтобы Swift мог распознавать большинство типов. Пожалуйста, перестаньте ранить всем глаза var placemark:MKPlacemark = MKPlacemark(...). Также старайтесь избегать NSDictionary, используйте Swift Dictionary

person vrwim    schedule 14.06.2015
comment
Это идеально. Спасибо за помощь. - person Adam Johnson; 14.06.2015
comment
@vrwim Излишняя печать должна быть предупреждением компилятора. Мы должны зарегистрировать радары. - person Jon Shier; 14.06.2015