【问题标题】:URLSession dataTask completionHandler does not work in playgroundURLSession dataTask completionHandler 在操场上不起作用
【发布时间】:2018-02-06 00:21:28
【问题描述】:

我从 youtube 上观看了一个教程并尝试了该教程。然后我写 操场文件中的代码,我没有得到结果,但没有错误。 因此,我在 XCode 中创建了一个新项目。然后向 Main.StoryBoard 添加一个 Button 并将 UI 连接到代码。完成所有必要的事情后,我在模拟器中运行项目,一切顺利,我可以看到完成处理程序中的所有工作。以下是 XCode 项目中的代码。

@IBAction func doNetwork(_ sender: UIButton) {
    print("start network jobs...")
    // url
    let url: URL! = URL(string: "http://192.168.0.12/swnet.php")
    URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)
    // url session
    let session = URLSession.shared
    let task: URLSessionDataTask = session.dataTask(with: url, completionHandler: {
        (data, response, error) in
        print("Handler")
        if let respData = data {
            print("Data")
            print(respData)
        }
        if let resp = response {
            print("Resp")
            print(resp)
        }
        if let err = error {
            print("Error")
            print(err)
        }

    })

    task.resume()
}

以下是 Playground 中的代码。

// url
let url: URL! = URL(string: "http://192.168.0.12/swnet.php")
URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)
// url session
let session = URLSession.shared
let task: URLSessionDataTask = session.dataTask(with: url, completionHandler: {
    (data, response, error) in
    print("Handler")
    if let respData = data {
        print("Data")
        print(respData)
    }
    if let resp = response {
        print("Resp")
        print(resp)
    }
    if let err = error {
        print("Error")
        print(err)
    }

})

task.resume()

【问题讨论】:

  • @creeperspeak 问题是我的帖子标题“URLSession dataTask completionHandler 在操场上不起作用”

标签: ios swift xcode


【解决方案1】:

您需要告诉 Playground 继续执行足够长的时间以完成您的异步代码。为此:

import PlaygroundSupport 

PlaygroundPage.current.needsIndefiniteExecution = true 

来自Apple's docs on this property

默认会执行所有顶层代码,然后执行 终止。使用异步代码时,启用无限期 执行以允许在结束后继续执行 到达 playground 的顶层代码。这反过来又提供了线程 和回调时间来执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    相关资源
    最近更新 更多