Alamofire在Mac OS命令行应用程序中返回空响应

时间:2018-01-27 17:40:05

标签: ios swift alamofire

我想知道为什么我的代码无效。我创建了网址并尝试通过Alamofire获得响应。网址是正确的,它在Postman中提供数据。

代码是:

static func getRepolist(request: URLRequest?,
                            completion: ([String]) -> ()) {
        guard let request = request else { return }

        Alamofire.request(request)
        .validate()
        .responseJSON { (response) in
            print(response)
        }
    }

请求是(在控制台中从po request获取):

▿ https://api.github.com/search/users?q=srdanrasic
  ▿ url : Optional<URL>
    ▿ some : https://api.github.com/search/users?q=srdanrasic
  - cachePolicy : 0
  - timeoutInterval : 60.0
  - mainDocumentURL : nil
  - networkServiceType : __ObjC.NSURLRequest.NetworkServiceType
  - allowsCellularAccess : true
  ▿ httpMethod : Optional<String>
    - some : "GET"
  ▿ allHTTPHeaderFields : Optional<Dictionary<String, String>>
    - some : 0 elements
  - httpBody : nil
  - httpBodyStream : nil
  - httpShouldHandleCookies : true
  - httpShouldUsePipelining : false

为什么它不打印任何东西?它没有完成块。 它只是在日志中告诉我 - 程序以退出代码结束:0。 也许在app完成运行之前没有时间完成请求?

3 个答案:

答案 0 :(得分:1)

在获得正确的数据并解析后,您应该自己调用

process->setProgram(app);
process->start();

答案 1 :(得分:1)

以这种方式试试......因为您在正文中收到的数据很可能是json数据所以返回Any

static func getRepolist(request: URLRequest?,
                        completion: ([Any]) -> ()) {
    guard let request = request else { return }

    Alamofire.request(request)
    .validate()
    .responseJSON { (response) in
      case.success( _):
         print(response.result.value)
         let body:Any = response.result.value
         completion(body)
       case.failure( _):
         let errData = response.data
         print(String(data: errData!, encoding: String.Encoding.utf8) ?? "NO ERROR DATA")
    } 
}

答案 2 :(得分:0)

实际上问题是,我使用了命令行工具。所以程序在我获取数据之前终止。通过添加:

轻松解决
RunLoop.main.run(until: Date(timeIntervalSinceNow: 15))