我正在尝试了解如何在 Swift 中使用 API。作为一个很好的第一次测试,我想我应该使用 iTunes API 并返回一些搜索结果。 我在操场上使用以下代码。我没有收到任何错误,但我的
println
没有输出任何内容。 有谁知道怎么了?
import UIKit
import XCPlayground
XCPSetExecutionShouldContinueIndefinitely()
let url = NSURL(string: "https://itunes.apple.com/lookup?id=909253")
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
println(NSString(data: data, encoding: NSUTF8StringEncoding))
}
task.resume()
尝试添加这行代码:
URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)
对于 Swift 3/Xcode 8.2.1,结合几个答案(rv1331、Wouter van Zuilen)给出了最好的结果,并且在 Playground 中没有错误。我正在使用这个 Swift 3 REST 示例:
import PlaygroundSupport
import Foundation
PlaygroundPage.current.needsIndefiniteExecution = true
URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)
Swift 3 代码:
<!-- language: lang-c -->
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
尝试下面的行,我想它会起作用:
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
不确定为什么您没有看到错误 - 我明白了:
NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9807)
您可以使用 httpbin.org 更有效地进行测试——这对我来说非常有效:
let url = NSURL(string: "http://httpbin.org/get")
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
println(NSString(data: data, encoding: NSUTF8StringEncoding))
}
task.resume()
我的答案不正确,这实际上只是在playgound中的无限页面执行。会话类型并不重要。
最近遇到同样的问题并找到解决方案。
该错误是由使用
URLSession.shared()
引起的,这显然在操场沙箱中是不允许的。
创建并使用您自己的临时 URL 会话:
let session = URLSession(configuration: URLSessionConfiguration.ephemeral)