私は現在、住所をジオコーディングして座標に配置する必要があるプロジェクトを作成しています。ご覧のとおり、私はこれを行うために以下の機能を以下に作っており、機能しています。ただし、この関数で返される変数は、アプリケーションの残りの部分では更新されていないようです。以下は私のコードです。私がする必要がどのような非同期関数の後に値が更新されないのはなぜですか?
var startLat: Double!
var startLong: Double!
typealias theDouble = (Double, Double) ->()
func forwardGeocodingStarting(address: String, completion: theDouble){
//your code
let aVar: Double!
let bVar: Double!
let placemark = placemarks?[0]
let location = placemark?.location
let coordinate = location?.coordinate
aVar = (coordinate?.latitude)!
bVar = (coordinate?.longitude)!
completion(aVar, bVar)
}
// CALL THIS FUNCTION
forwardGeocodingStarting(<your string address>) { firstVar, secondVar in
startLat = firstVar
startLong = secondVar
print("\(startLat) is lat and \(startLong) is long") //GET CORRECT VALUES
}
print(startLat) // GET "NIL"
print(startLong) // GET "NIL"
// ================= EDIT ==============
if startLat != 0 {
let startLatUnwrapped: Double = startLat
}
if startLong != 0 {
let startLongUnwrapped: Double = startLong
}
は私のプロジェクト全体startLat
& startLong
を使用しているが、それは関数を呼び出す私の外に更新されていないようです。関数呼び出しの外でこれらの2つの変数を呼び出すと、nil
が返されます。どんな助けでも大歓迎です。
'forwardGeocodingStarting'は完了ブロックが時間の後半で呼ばれていることを意味し非同期に動作します。 2つの 'print'行、つまり値を処理するコードを他の' print'行のようにブロックに入れてください。 – vadian