参数类型' [MGLPointAnnotation]'不符合预期的类型' MGLAnnotation'

时间:2016-09-29 15:15:33

标签: dictionary annotations mapbox unwrap

我最近开始学习swift,现在已经开始制作自己的地图了。我已经成功使用mapkit创建了一个应用程序,现在我正在尝试使用mapbox,因为我喜欢它的设计功能。

我构建了一个字典,它保存了我的位置数据,之后我正在创建一个循环,它将数据添加到我的地图中。但是我现在卡住了,因为我收到以下错误:

"参数类型' [MGLPointAnnotation]'不符合预期类型' MGLAnnotation'

当我尝试使用我的字典mapView.addAnnotation时会发生这种情况。到目前为止,我已经知道它与在字典中展开值有关,但是当我通过编写mapView.addAnnotation(注释为!MGLAnnotation)来强行解包时,我的应用程序崩溃了。

有人能告诉我正确的方向吗?我不是在寻找修补程序,而是在找出错误的地方。非常感谢!

以下是代码:

let locations = [
        ["name" : "Apple Inc.",
         "latitude" : 37.33187,
         "longitude" : -122.02951,
         "mediaURL" : "http://www.apple.com"],
        ["name" : "BJ's Restaurant & Brewhouse",
         "latitude" : 37.33131,
         "longitude" : -122.03175,
         "mediaURL" : "http://www.bjsrestaurants.com"]
    ]

    var annotations = [MGLPointAnnotation]()

    for dictionary in locations {
        let latitude = CLLocationDegrees(dictionary["latitude"] as! Double)
        let longitude = CLLocationDegrees(dictionary["longitude"] as! Double)
        let coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
        let name = dictionary["name"] as! String
        let discription = dictionary["mediaURL"] as! String
        let annotation = MGLPointAnnotation()
        annotation.coordinate = coordinate
        annotation.title = "\(name)"
        annotation.subtitle = "\(discription)"
        annotations.append(annotation)
    }

mapView.addAnnotation(annotations as! MGLAnnotation)

1 个答案:

答案 0 :(得分:0)

您正在尝试将某个数组投射到另一个对象... annotations是一个数组,而MGLAnnotation是一个对象。

所以改变 mapView.addAnnotation(annotations as! MGLAnnotation)mapView.addAnnotation(annotations as! [MGLAnnotation])

那应该删除你的错误...但是你也使用方法addAnnotation,它只期望一个对象作为参数。所以尝试: mapView.addAnnotation(annotations[0])

注意:我的第一个解决方案是展示错误的解决方案 - 它仍然无法正常工作,因为"期望只有1个对象"情况。

希望这有助于解释一些事情:)