做块保证本地变量将被修改的 Swift 吗?

标签: ios Swift
发布时间: 2017/3/6 22:55:29
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.
func foo() -> Bool {
    var apiResult : Bool = false
    myAPI.bar() { (result: Bool) -> Void in
        // some logic in block and local variable assignment
        apiResult = result
    }
    return apiResult
}

是的值 apiResult 保证由块中通过更新吗? (我是一个大学学生学习 iOS,所以请将尽可能提供更多)

解决方法 1:

这是一个线程的问题。很多时候关闭表明某种将异步执行的逻辑。你的情况你有一个 api 封闭,要你执行某种网络请求。这样的结果是该函数 foo 开始,分配 apiResult ,发射了封闭线,然后立即返回 apiResult ,这将是 false

一个平常的事,你看到有网络电话是要调用的函数包含在其声明中的闭包。

func foo(completion: Bool -> Void) {
    myAPI.bar() { (result: Bool) -> Void in
        // some logic in block and local variable assignment
        completion(result)
    }
}

当您调用 foo() 它会看起来像这样︰

    foo { (apiResult) in
        // apiResult will equal the result of your apiRequest
    }

你可以立即返回结果的一种方法是,如果你碰巧有一个缓存系统到位。你可以从您的缓存中提取和返回的结果,如果它存在。如果它不存在你向前移动并运行您的异步请求。这种设置一般看到更多的与数据库,但图像缓存使用到这几乎一样的东西。我需要的图片 xyz,检查我的缓存,以查看它是否已存在,若不返回,如果不是,打网络,返回的值,一次完成。

赞助商