ios - swift 中的简单完成处理程序或回调

标签 ios swift

我有以下代码,它请求一些 JSON 对象,然后调用一个函数根据这些标签从服务器获取图像。我正在重构我的代码,以便在请求完成时不强制我的 UICollectionView 重新加载,所以我只想在用户触发先前 View 的 tableview segue 时收集图像。在 prepareForSegue() 中,我有以下代码:

let priority = DISPATCH_QUEUE_PRIORITY_BACKGROUND
            dispatch_async(dispatch_get_global_queue(priority, 0)) {

                self.performTagRequest(tagText!)
                self.imageRequestCompletionBool = self.requestImages(self.tagResultObject)

            }    
            (segue.destinationViewController as PhotoViewController).detailItem = globalImageArray

我该如何让 requestImages() 函数仅在 performTagRequest() 函数完成后调用,然后才设置详细信息项?

我只是想避免在较大的调用上出现竞争。

performTagRequest 的代码是

func performTagRequest(detail : String) {
    var request = HTTPTask()
    var formattedDetail = detail.stringByReplacingOccurrencesOfString("\"", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)
    var url = "http://www.gifbase.com/tag/\(formattedDetail)?format=json"
    url = url.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
    request.GET(url, parameters: nil, success: {(response: HTTPResponse) in
        if response.responseObject != nil {
            let data = response.responseObject as NSData
            var tagResponse = TagResponse(JSONDecoder(data)) //Json Object of all image url
            self.tagResultObject = tagResponse
        }
        },failure: {(error: (NSError, HTTPResponse?)) in
            println("error: \(error)")
    })

}

最佳答案

看起来您需要一个完成处理程序。 将 performTagRequest() 的声明更改为类似以下内容:

func performTagRequest(tagText: String!, completion: (() -> Void)!)

并在 performTagRequest() 的末尾添加:

completion()

运行完成代码。

然后这样调用它:

self.performTagRequest(tagText!){
    self.imageRequestCompletionBool = self.requestImages(self.tagResultObject)
}

为简单起见,上面使用了尾随闭包,但您可以这样调用它:

self.performTagRequest(tagText!, completion:{
            self.imageRequestCompletionBool = self.requestImages(self.tagResultObject)
})

如果你想在它后面添加其他参数。

关于ios - swift 中的简单完成处理程序或回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27748206/

相关文章:

swift - WKDownloadDelegate 下载失败并出现错误 -3000

json - 将序列化的 JSON 加载到表中?

objective-c - 如何从 UIColor 获取反色?

ios - API 不包含某些对象的任何值,Xcode 在运行该应用程序时会出现 fatal error

ios - 让 Spritekit 显示存储在变量中的整数

ios - 更改可以嵌套在 Swift 中的键的 JSON 值

arrays - 我有十个按钮,我需要知道用户选择了哪个按钮并将该信息保存到用户配置文件中

ios - 如何在 playground 中使用 cocoapods?

iOS FBLoginView : the user is not allowed to see this application per the developer set configuration

javascript - webkit iOS 5 上的自定义 Javascript 事件不起作用