2017-09-20 56 views
0

我想弄清最简单的方式来在Swift 4中发出HTTP请求。我已从URLSession programming guide复制此代码,并添加了几个打印语句。我无法弄清楚为什么.dataTask没有执行。从文档不工作的Swift 4 URLSession示例代码

print("Testing URLSession") 
let sessionWithoutADelegate = URLSession(configuration: URLSessionConfiguration.default) 
if let url = URL(string: "https://www.example.com/") { 
    print("Encoded url \(url)") 
    (sessionWithoutADelegate.dataTask(with: url) { (data, response, error) in 
     print("Executing dataTask") 
     if let error = error { 
      print("Error: \(error)") 
     } else if let response = response, 
      let data = data, 
      let string = String(data: data, encoding: .utf8) { 
      print("Response: \(response)") 
      print("DATA:\n\(string)\nEND DATA\n") 
     } 
    }).resume() 
} 

的最终目的是从一个REST API检索数据,但我甚至不能做一个简单的GET请求正常工作......

+1

这是在iOS或macOS应用程序或命令行应用程序中?或在游乐场? –

+0

这是在命令行应用程序中。我在一个操场上试了一下,但它似乎没有正常工作,因为它停止在右侧显示值,即使是打印报表等。 – mooglinux

+1

...结束大括号后是否有任何代码,或者程序是否结束? 'URLSessionTask'异步运行,所以如果程序在结束之前结束,你永远不会看到它的结果。 – NobodyNada

回答

2

我终于想通了,如何使它工作中使用CFRunLoop

let runLoop = CFRunLoopGetCurrent() 
let task = session.dataTask(with: request) { (data, response, error) in 
    print("Retrieved data") 
    CFRunLoopStop(runLoop) 
} 
task.resume() 
CFRunLoopRun() 
print("done")