在Swift中从URL获取数据

Joy*_*Joy 5 json ios swift

我正在尝试从服务器下载JSON文件,并按照以下教程进行操作(http://www.learnswiftonline.com/mini-tutorials/how-to-download-and-read-json/

首先,我尝试了“检查响应”部分(我添加了一些部分以查看出了什么问题)

let requestURL: NSURL = NSURL(string: "http://www.learnswiftonline.com/Samples/subway.json")!
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(urlRequest) {
    (data, response, error) -> Void in

        let httpResponse = response as! NSHTTPURLResponse
        let statusCode = httpResponse.statusCode

        if (statusCode == 200) {
            print("Everyone is fine, file downloaded successfully.")
        } else  {
            print("Failed")
        }

task.resume()
Run Code Online (Sandbox Code Playgroud)

这应该打印“每个人都很好〜”或“失败”,但都不会出现...我试图查看statusCode,所以我放进去了print(statusCode)task但是什么也没打印。

这是我的操场截图:

在此处输入图片说明

+

Swift命令行程序中的CFRunLoop

这是我一直在寻找的答案,因为我正在处理OS X命令行应用程序(我将整个程序移到操场上看看会发生什么)。如果您与我相同,请检查

Lau*_*oiu 5

您看不到任何内容,因为dataTaskWithRequest它是异步的,并且您的 Playground 在“task.resume()”之后停止。异步任务不会运行更改。

您可以在最后调用它task.resume

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
Run Code Online (Sandbox Code Playgroud)

还可以“导入 XCPlayground”,如下所示:

import Foundation
import XCPlayground

let requestURL: NSURL = NSURL(string:  "http://www.learnswiftonline.com/Samples/subway.json")!
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(urlRequest) {(data, response, error) -> Void in

  let httpResponse = response as! NSHTTPURLResponse
  let statusCode = httpResponse.statusCode

  if (statusCode == 200) {
     print("Everyone is fine, file downloaded successfully.")
  } else  {
     print("Failed")
  }

}
task.resume()

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
Run Code Online (Sandbox Code Playgroud)

这篇文章可能会澄清更多: How do I run Asynchronous callbacks in Playground

编辑:

在 Swift 3 中,情况发生了一些变化。

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
Run Code Online (Sandbox Code Playgroud)