Swift NSURLSession请求本地服务器 - 没有数据发送或接收

时间:2016-04-02 16:31:28

标签: swift nsurlsession

我试图在Swift 2.2中使用NSURLSession为我在端口3000本地运行的服务器编写一个简单的API客户端。服务器只提供一个静态的JSON字符串。< / p>

这很好用:

$ curl http://localhost:3000
{"data":"value"}

我的Swift代码来点击API:

// api_client.swift

let url = NSURL(string: "http://localhost:3000/api")

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
    print("The response was:")
    print(NSString(data: data!, encoding: NSUTF8StringEncoding))
}

print("Running the request...")
task.resume()

我试图从命令行运行它

$ swift api_client.swift
Running the request...

但这就是发生的一切。我没有看到&#34;回复是&#34;行打印,或来自服务器的响应。当我检查服务器日志时,它显示没有任何请求进入。

我做错了什么?我对Swift很新,我很难搞清楚这一点。我是关于Swift 2.2和XCode 7.3的。

2 个答案:

答案 0 :(得分:0)

跟进pbush25的说法。您可以尝试在代码中创建回调吗?

func GET(path : String, callback: (result: NSData?, response: NSHTTPURLResponse?, error: NSError?) -> Void) {
    let session = NSURLSession.sharedSession()  
    let url = NSURL(string: path)  
    let task = session.dataTaskWithURL(url!){  
        (data, response, error) -> Void in  
            if (error != nil) {
                // return the NSData as nil (since you have an error)
                callback(result: nil, response: response as? NSHTTPURLResponse, error: error!)
            } else {
                // return the NSData
                callback(result: data, response: response as? NSHTTPURLResponse, error: nil)
            }
        }  
    task.resume()  
}

然后用:

调用你的函数
GET("http://localhost:3000/api") {
    (data, response, error) -> Void in 
    print(data)
}

答案 1 :(得分:0)

感谢pbush25我发现我的请求没有执行,因为运行时在异步请求启动之前到达了文件的末尾。

Another user with this problem使用信号量解决了它,但是通过在代码底部添加sleep(1)来快速而肮脏地证明这是问题。如果我这样做,我会在日志中看到请求并返回数据!