私は、ポストコードであり、forループで緯度、経度、タイトル、および郵便番号に変更する配列の要素を取って、その結果で辞書の配列を作成して追加するループを持っています。元の配列には3つのポストコードがありますが、これは印刷されていますが、何らかの理由でループが3回繰り返されているだけでなく、重複データを与えているかなりの回数です。これは何らかの形で3つの結果を残して動作しますが、郵便番号とタイトルがすべて異なる場合がありますが、場合によっては2つの異なる郵便番号で同じタイトルが返される場合もあります。重複を作成するループです。 iOS、Swift
誰でもこの点を正しい方向に助けてくれますか?
self.places = self.pCodes
// Loop start
for eachAddress in self.places {
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(eachAddress) {
placemarks, error in
let placemark = placemarks?.first
let lat = placemark?.location?.coordinate.latitude
let lon = placemark?.location?.coordinate.longitude
let postPcode = eachAddress
let locationTitle = self.cNames[self.lt]
let latLon = ["Post Code": postPcode, "title": locationTitle, "latitude":lat!, "longitude": lon!] as [String : Any]
self.posts.append(latLon)
// adding 1 to lt to pick the next title in the array
if self.lt < (self.pCodes.count - 1) {
self.lt += 1
}else {
self.lt = (self.pCodes.count - 1)
}
// removing duplicates
var set = Set<String>()
let arraySet: [[String : Any]] = self.posts.flatMap {
guard let name = $0["Post Code"] as? String else {return nil }
return set.insert(name).inserted ? $0 : nil
}
self.postsFinal = arraySet
print("Tony Places \(self.places)")
print("Tony: postsFinal \(self.postsFinal)")
self.showSightingsOnMap()
}
}
これは印刷物です。
トニー場所[ "OL8 2TT"、 "PO1 5DS"、 "PO1 5JA"] トニー:postsFinal [[ "緯度":53.514649900000002、 "郵便番号": "OL8 2TT"、 "タイトル": "JDFG VBF"、 "経度":-2.1052824000000001]] Tony Places ["OL8 2TT"、 "PO1 5DS"、 "PO1 5JA"] Tony:postsFinal [["latitude":53.514649900000002、 "Post Code": " 「OL8 2TT」、「PO1 5DS」、「PO1 5JA」] Tony:postsFinal [["latitude": "OL8 2TT"、 "タイトル": "JDFG VBF"、 "経度":-2.1052824000000001] 「OL8 2TT」、「PO1 5DS」、「PO1 5JA」] Tony Places ["OL8 2TT"、 "PO8] :postsFinal [[" 「緯度」:53.514649900000002、「郵便番号」:「OL8 2TT」、「タイトル」:「JDFG VBF」、「経度」:-2.1052824000000001]、「緯度」:50.800523599999998、「郵便番号」:「PO1 5DS」、 「QWER QWE」、「経度」:-1.0723248000000001] Tony Places ["OL8 2TT"、 "PO1 5DS"、 "PO1 5JA"] Tony:postsFinal [["latitude":53.514649900000002、 "郵便番号"、" OL8 2TT "、"タイトル "、" JDFG VBF "、"経度 ":-2.1052824000000001]、[緯度]:50.800523599999998、"郵便番号 ":" PO1 5DS "、"タイトル ":" QWER QWE " 「経度」:-1.0723248000000001]、「緯度」:50.802415099999997、「郵便番号」:「PO1 5JA」、「タイトル」:「QWER QWE」、「経度」:-1.0726989] Tony Places ["OL8 2TT" 、 "PO1 5DS"、 "PO1 5JA"] Tony:postsFinal [["latitude":53.514649900000002、 "Post Code": "OL8 2TT"、 "タイトル": "JDFG VBF"、 "経度":-2.1052824000000001] ["緯度":50.800523599999998、 "郵便番号": "PO1 5DS"、 "タイトル": "QWER QWE" "経度":-1.0723248000000001]、[ "緯度":50.802415099999997、 "郵便番号": "PO1 5JA"、 "タイトル": "QWER QWE"、 "経度":-1.0726989]]
pCodesの宣言を投稿できますか?それはNSArray、配列などです –
@Kris Gellci var pCodes = [String]()pCodesは場所と全く同じポストコードの配列です。 Firebaseデータベースのポストコードをキーとして取得し、配列に格納します。また、データベースの値であるvar cNames = [String]()もあり、これらも配列に入れられます。だから私は基本的に2つの配列を1つのキーとfirebaseの値の他の2つの他の要素と一緒に辞書を作成すると追加します。私はその後、辞書の配列を投稿に追加します。 –
非同期呼び出しを扱う方法は変です。代わりに 'dispatch_group()'を使用します:https://stackoverflow.com/questions/39465789/swift-how-to-use-dispatch-group-with-multiple-called-web-service – Larme