openMapsWithItems 不能在 Swift 2.0 中调用参数列表问题

Posted

技术标签:

【中文标题】openMapsWithItems 不能在 Swift 2.0 中调用参数列表问题【英文标题】:openMapsWithItems cannot Invoke with argument list issue in Swift 2.0 【发布时间】:2015-06-14 06:34:24 【问题描述】:

我在将 Swift 1.2 代码转换为 2.0 时遇到了一些问题 - 这是其中之一。

我有一个功能,它可以打开 ios 地图应用程序以指示前往某个位置的方向。在转换之前它工作正常。现在我收到以下错误消息:

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])

有什么想法吗?谢谢。

【问题讨论】:

声明launchOptions like let launchOptions : [NSObject : AnyObject] = [MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving] 并删除as [NSObject : AnyObject] 感谢 Kametrixom,但我仍然收到以下错误:“无法使用类型参数列表调用 openMapsWithItems ([MKMapItem],launchOptions: [NSObject : AnyObject])”。我已经清理了构建以防出现问题,但它仍然无法正常工作。 【参考方案1】:

从the pre-release developer resources for MKMapItem 中可以看出,openMapsWithItems:launchOptions: 现在已从采用 [NSObject : AnyObject]! 变为采用 [String : AnyObject]?,因此您必须这样声明(或强制转换)它。

更改代码行

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

let launchOptions = [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving]

最后一行

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

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

应该可以的。

旁注:您应该更改代码样式以允许 Swift 推断大多数类型。请不要再用var placemark:MKPlacemark = MKPlacemark(...)伤害大家的眼睛。也尽量避免NSDictionary,请使用Swift的Dictionary

【讨论】:

太完美了。感谢您的帮助。 @vrwim 冗余输入应该是编译器警告。我们应该归档雷达。

以上是关于openMapsWithItems 不能在 Swift 2.0 中调用参数列表问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 SWI 序言

SWI Prolog与GNU Prolog - SWI下的CLP(FD)问题

arm体系如何对SWI功能

如何在 SWI-Prolog 上设置闹钟?

Swi-prolog 双向子句/事实

应用调试系统调用SWI