ios – 如何从Swift中的Closure返回值?

所以我使用fabric plugin / Twitter-kit在我的应用程序中使用twitter api.我想获得一个名人的个人资料图片图片网址.这是我的代码如下.
func getimageURL(celebrity :String) -> String{

    var imageURL = ""
    let client = TWTRapiclient()
    let statusesShowEndpoint = userSearch
    let params = ["q": celebrity,"page" : "1","count" : "1"
                  ]
    var clientError : NSError?

    let request = client.URLRequestWithMethod("GET",URL: statusesShowEndpoint,parameters: params,error: &clientError)

     client.sendTwitterRequest(request) { (response,data,connectionError) -> Void in
        if connectionError != nil {
            print("Error: \(connectionError)")
        }

        do {
            let json = try NSJSONSerialization.JSONObjectWithData(data!,options: [])
            print("json: \(json)")

            let profileImageURL: String? = json[0].valueForKey("profile_image_url_https") as? String

            imageURL =  self.cropTheUrlOfImage(profileImageURL!)
            print(imageURL)

            //how do i return the value back. confused ?????
            return imageURL

        } catch let jsonError as NSError {
            print("json error: \(jsonError.localizedDescription)")
        }
    }

    return imageURL

}

我不知道如何返回值,因为该方法在闭包执行之前完成.我是新手,很快,任何帮助表示赞赏.

我想在tableview中的cellForRowIndexPath中使用此方法来从imageURl下载图像.

解决方法

你是对的,sendTwitterRequest将在你的函数返回后返回,所以外部函数无法返回imageURL.

相反,在闭包中,获取单元格中所需的返回值并将其存储在某处(在成员变量中)并让tableView自行更新它(例如使用tableView.reloadData()).

这将导致它再次获取单元格(cellForRow …).更改实现以使用存储调用值的成员变量.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...