我最近开始学习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)
答案 0 :(得分:0)
您正在尝试将某个数组投射到另一个对象... annotations
是一个数组,而MGLAnnotation
是一个对象。
所以改变
mapView.addAnnotation(annotations as! MGLAnnotation)
至
mapView.addAnnotation(annotations as! [MGLAnnotation])
那应该删除你的错误...但是你也使用方法addAnnotation
,它只期望一个对象作为参数。所以尝试:
mapView.addAnnotation(annotations[0])
注意:我的第一个解决方案是展示错误的解决方案 - 它仍然无法正常工作,因为"期望只有1个对象"情况。
希望这有助于解释一些事情:)