gpt4 book ai didi

ios - 为什么异步函数后值没有更新?

转载 作者:行者123 更新时间:2023-11-30 13:12:10 26 4
gpt4 key购买 nike

我目前正在创建一个项目,我需要对地址进行地理编码并将其放入坐标中。正如您所看到的,我在下面创建了以下函数来执行此操作,并且它有效。但是,此函数中返回的变量似乎不会在应用程序的其余部分中更新。下面是我的代码。

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
}

我需要做的是在整个项目中使用 startLatstartLong,但它似乎没有在我调用该函数之外进行更新。当我在函数调用之外调用这两个变量时,它只返回 nil。非常感谢任何帮助。

最佳答案

异步 block 立即返回控制权。所以,当你打电话时

print(startLat)

在异步 block 之后,它将不包含更新的值(在本例中,它包含 nil)。我建议不要在异步 block 之后立即使用变量,而是创建一个方法来对变量执行所需的工作,并在异步闭包结束时调用它。

安全使用变量的另一种方法是检查它们是否为零。您可以使用

if let

安全地解开变量。

希望这有帮助。

编辑

这就是我的意思:

forwardGeocodingStarting(<your string address>) { firstVar, secondVar in

startLat = firstVar
startLong = secondVar
print("\(startLat) is lat and \(startLong) is long") //GET CORRECT VALUES

self.unwrapAndPrintCoordinates()
}

//Now, if anywhere in your code, you want to check if startLat and startLong
//have values, you call this method

func unwrapAndPrintCoordinates() {

//Unwrap startLat
if let startLatUnwrapped = startLat {
print(startLatUnwrapped)
}

//Unwrap startLong
if let startLongUnwrapped = startLong {
print(startLongUnwrapped)
}
}

关于ios - 为什么异步函数后值没有更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38618605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com