Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift session.dataTask不工作_Swift_Get_Request - Fatal编程技术网

Swift session.dataTask不工作

Swift session.dataTask不工作,swift,get,request,Swift,Get,Request,我有一个从API请求检索数据的方法: let session = URLSession.shared let url = URL(string: "http://eventregistry.org/json/article?conceptUri=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FAfghanistan&lang=eng&action=getArticles&articlesSortBy=date&resu

我有一个从API请求检索数据的方法:

    let session = URLSession.shared
    let url = URL(string: "http://eventregistry.org/json/article?conceptUri=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FAfghanistan&lang=eng&action=getArticles&articlesSortBy=date&resultType=articles")!

    let task = session.dataTask(with: url) { (data, _, _) -> Void in
        if let data = data {
            print(JSON(data: data))
            completion()
        }
    }
    task.resume()
当通过浏览器访问时,该链接工作正常,但是当在XCode中逐行调试时,let task=session.dataTask中的任何代码都不会执行,因此打印不会在日志中打印

我正在运行模拟器,我的笔记本电脑有互联网,我只是不知道为什么这不起作用


有人明白为什么吗?

试着这样写。也要尽量避免空虚

首先,您需要发出URL请求

例如:

let urlRequest = URLRequest(url: URL(string: "Your url/API links here")!)

let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in {

     //Your codes here
   }

task.resume()
}

希望能有帮助。如果您需要任何进一步的解释,我将发布一个示例答案来检索注册表文章。

当您说逐行调试时,是否让runloop运行?@Ssswift抱歉,这没有设置。现在已经执行了,但由于某种原因,检索到的JSON为空?虽然在浏览器中发出请求时,它会从请求中检索所有数据,但我将其粘贴到Xcode中的一个新项目中,将打印/完成行更改为data.count的简单NSLog,因为我不知道JSON类/结构是什么,并根据Xcode的警告将http更改为https,然后运行它。它显示返回的15594字节。我甚至在完成处理程序中设置了一个断点,它被触发了。您能否更具体地说明如何在调试器中运行此功能?@Ssswift Hmmm mine返回70字节:/?JSON类是由库SwiftyJSON提供的。我正在使用一个模拟器运行它,该模拟器在viewDidLoad上调用此函数。我完全不明白为什么它在为您工作时不工作?您是否尝试过一个不需要模拟器的项目?听起来很可疑,你的问题不是代码,而是仿真器对你的网络请求所做的事情。