【问题标题】:Issue executing closure block in swift问题在 swift 中执行关闭块
【发布时间】:2014-09-17 02:28:26
【问题描述】:

我正在快速使用一些 API。我遇到了 Forecast.io API for weather,下载了一个 Objective-c 包装器,并在我的 xcode 项目中创建了一个桥接头。我遇到的唯一问题是我有一个不会执行的闭包(objective-c 块)。代码如下:

    var geocoder:CLGeocoder = CLGeocoder()
    geocoder.geocodeAddressString("1 Infinite Loop, Cupertino, CA", completionHandler: {objects, error in
        if (objects.count >= 0) {
            println("yes")
            curLocPlacemark = objects[0] as? CLPlacemark
            if(curLocPlacemark != nil) {
                curLocation = curLocPlacemark!.location
            }
        } else {
            println("no")
        }
    })

调试时,调试器到达geocoder.geocodeAddressString("1 Infinite Loop, Cupertino, CA", completionHandler: {objects, error in 行,然后跳过显示的其余行。这只是我找不到的愚蠢的语法错误吗?谢谢!

【问题讨论】:

    标签: ios swift forecastr


    【解决方案1】:

    闭包内的代码是异步执行的——它在地址字符串地理编码完成后由地理编码器打包并执行。 (这就是闭包的含义——包装代码和上下文以供以后执行。)您在日志中看到正确的输出了吗?

    【讨论】:

    • 不,但这可能是问题所在。在这段代码之后,我得到一个错误,因为我解包curLocation,我猜这可能是因为为curLocation赋值的代码尚未运行,但即将运行?我将如何解决这个问题?
    • 获取curLocation 是异步的,因此您无法立即访问它。您应该将依赖于curLocation 的代码移动到闭包中或从闭包中调用的方法中。
    猜你喜欢
    • 2014-08-23
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 2014-01-01
    • 2014-04-29
    • 1970-01-01
    相关资源
    最近更新 更多