ios - 快速从网络抓取函数返回一个字符串

标签 ios swift

好的,我正在抓取网页的一些基本数据。我想将我的代码重构为另一个类,并从我检索到的内容返回一个字符串,但这对于异步函数来说很困难,而且我对 swift 很陌生。

我现在意识到这个函数无法返回字符串,但我不太清楚如何配置完成处理程序以及如何使用完成处理程序从主类调用该函数。

任何帮助将不胜感激,谢谢。

func getNameFromProfileUrl(profileUrl: NSURL) -> String {

        var playerName = ""

        let task = NSURLSession.sharedSession().dataTaskWithURL(profileUrl,     completionHandler: { (data, response, error) -> Void in

            if error == nil {
                var urlContent = NSString(data: data, encoding: NSUTF8StringEncoding) as NSString!

                var urlContentArray = urlContent.componentsSeparatedByString("<title>")


                var statusArray = urlContentArray[1].componentsSeparatedByString("</title>")

                playerName = statusArray[0] as! String

            }

        })
        task.resume()
        return playerName
    }

最佳答案

本质上,您需要为主类中的该函数提供一个完成处理程序,该处理程序可以处理玩家名称的返回(或不返回)。您可以将该函数更改为没有返回值,但接受第二个参数,即完成处理程序:

func getNameFromProfileUrl(profileUrl: NSURL, completionHandler: (String?) -> Void) {
    let task = NSURLSession.sharedSession().dataTaskWithURL(profileUrl, completionHandler: { (data, response, error) -> Void in
        if error == nil {
            var urlContent = NSString(data: data, encoding: NSUTF8StringEncoding) as NSString!
            var urlContentArray = urlContent.componentsSeparatedByString("<title>")
            var statusArray = urlContentArray[1].componentsSeparatedByString("</title>")
            let playerName = statusArray[0] as? String

            completionHandler(playerName)
        } else {
            completionHandler(nil)
        }
    })
    task.resume()
}

从你的主类中,你可以用这样的方式调用它:

myWebScraper.getNameFromProfileUrl(profileURL) { playerName in
    // always update UI from the main thread
    NSOperationQueue.mainQueue().addOperationWithBlock {
        if let playerName = playerName {
            playerNameField.text = playerName
        } else {
            playerNameField.text = "Player Not Found"
        }
    }
}

关于ios - 快速从网络抓取函数返回一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32556523/

相关文章:

ios - 使用带有自定义单元格和下一个按钮的 TableView 在数组中加载下一个问题

ios - sqlite 3 "SQL error ' 内存不足' (7)"objc

ios - 使用自定义标题按钮修改 TableView 中的部分?

ios - Google Analytics 不适用于 iOS

ios - 更改静态表中单元格图像的图像大小

swift - 水平滚动 UICollectionView 有额外的行间距?

ios - 我怎样才能让 UNNotificationRequest 立即弹出?

swift - 在运行时在 swift 中注入(inject)具体类型

ios - Avplayer AVPlayerItemDidPlayToEndTime 通知不向观察者发送消息

ios - 编程过渡丢失导航栏