2016-04-16 8 views
7

以下の配列をどのように設定する必要がありますか。私のマップに複数の注釈を追加しようとしています。私はstackoverflow上のコードを見つけることができたが、彼らは配列を設定する方法を示していませんでした。スワイプで複数の注釈の配列を設定する方法

var objects = [ 
       //how should the array be setup here 
       ] 

for objecters in objects!{ 
    if let latit = objecters["Coordinates"]["Latitude"]{ 
     self.latitudepoint = latit as! String 
     self.map.reloadInputViews() 
    } 
    else { 
     continue 
    } 
    if let longi = objecters["Coordinates"]["Longitude"]{ 
     self.longitudepoint = longi as! String 
     self.map.reloadInputViews() 
    } 
    else { 
     continue 
    } 
    var annotation = MKPointAnnotation() 
    var coord = CLLocationCoordinate2D(latitude: Double(self.latitudepoint)!,longitude: Double(self.longitudepoint)!) 
    mapView.addAnnotation(annotation) 
} 
は、例えば
+0

このコードをリバースエンジニアリングするのではなく(オブジェクト配列は、それぞれが 'Latitude'と' Longitude'キーを持つ別の辞書である 'Coordinates'キーを持つ辞書の配列です)、実際の質問は_your_モデルは同じように見え、マップに注釈を追加する方法を示します。しかし、このコードにあなたのモデルを改造しようとはしないでください。あなたのモデルに合ったコードを書いてみましょう。 (さて、このコードスニペットはあまりよく書かれていないし、問題があるので、私はそれをまったく使用することをためらっています。) – Rob

+0

返信ありがとうございます。各配列には、緯度、経度、および文字列の3つの項目が含まれている必要があります。私は注釈をプロットするために座標を使用したいと思うし、注釈がユーザーによってタップされると、文字列が表示され、文字列がタップされている場合は、文字列を再利用するためのアクセスを与える別のビューコントローラを開きます –

答えて

19

あなたができる:代わり

let locations = [ 
    ["title": "New York, NY", "latitude": 40.713054, "longitude": -74.007228], 
    ["title": "Los Angeles, CA", "latitude": 34.052238, "longitude": -118.243344], 
    ["title": "Chicago, IL",  "latitude": 41.883229, "longitude": -87.632398] 
] 

for location in locations { 
    let annotation = MKPointAnnotation() 
    annotation.title = location["title"] as? String 
    annotation.coordinate = CLLocationCoordinate2D(latitude: location["latitude"] as! Double, longitude: location["longitude"] as! Double) 
    mapView.addAnnotation(annotation) 
} 

または、使用するカスタムタイプ、例えば:

struct Location { 
    let title: String 
    let latitude: Double 
    let longitude: Double 
} 

let locations = [ 
    Location(title: "New York, NY", latitude: 40.713054, longitude: -74.007228), 
    Location(title: "Los Angeles, CA", latitude: 34.052238, longitude: -118.243344), 
    Location(title: "Chicago, IL",  latitude: 41.883229, longitude: -87.632398) 
] 

for location in locations { 
    let annotation = MKPointAnnotation() 
    annotation.title = location.title 
    annotation.coordinate = CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude) 
    mapView.addAnnotation(annotation) 
} 

それともあなたは置き換えることができるmapforループ:

let annotations = locations.map { location -> MKAnnotation in 
    let annotation = MKPointAnnotation() 
    annotation.title = location.title 
    annotation.coordinate = CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude) 
    return annotation 
} 
mapView.addAnnotations(annotations) 
+0

私は探していた。偉大な助けをありがとう –

+0

感謝は必要ありません。あなたの質問への回答を受け入れているようには思われません。 「私の質問に誰かが答えるとき、私は何をすべきですか?」(http://stackoverflow.com/help/someone-answers)を参照してください。私はこの回答を受け入れることを検討するだけでなく、古い質問に戻り、そこにあなたが受け入れるはずの答えがあります。 – Rob

+1

私は受け入れなければならないことは分かっていませんでしたが、私はあなたの答えにしました。他のすべての質問に戻り、私のために働く答えを選択します。 –

関連する問題