线程 1:发出 SIGABRT alamofire 信号

问题描述 投票:0回答:1

我对 Swift 3 非常陌生,我必须在我的 API 上执行 GET 请求。我正在使用 Alamofire,它使用异步函数。

我在 Android 应用程序上执行完全相同的操作,并且 GET 返回 JSON 数据

这是我的 swift 代码:

    func getValueJSON() -> JSON {
        var res = JSON({})
        let myGroup = DispatchGroup()
        myGroup.enter()
        Alamofire.request(url_).responseJSON { response in
            res = response.result.value as! JSON
            print("first result", res)
            myGroup.leave()
        }
        myGroup.notify(queue: .main) {
            print("Finished all requests.", res)
        }
        print("second result", res)
        return res
   }

但是我对“res = response.result.value”行有疑问,这给了我错误:

线程 1:信号 SIGABRT

我真的不明白问题出在哪里,做一个“同步”功能相当困难,也许我做错了。

我的目标是将请求的结果存储在我返回的变量中。有人可以帮忙吗?

swift xcode multithreading http alamofire
1个回答
1
投票

我建议您将 Alamofire 与 SwiftyJSON 一起使用,因为这样您将能够更轻松地解析 JSON。

这是一个经典的例子:

Alamofire.request("http://example.net", method: .get).responseJSON { response in
    switch response.result {
    case .success(let value):
        let json = JSON(value)
        print("JSON: \(json)")
    case .failure(let error):
        print(error)
    }
}

如果需要传递

parameters
headers
,只需在
request
方法中添加即可。

 let headers: HTTPHeaders = [
        "Content-Type:": "application/json"
 ]

 let parameters: [String: Any] = [
        "key": "value"
 ]

所以你的请求将是这样的(这是 POST 请求):

Alamofire.request("http://example.net", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { response in

switch response.result {

      case .success(let value):
          print(value)
      case .failure(let error):
          print(error)
     }
}

我还没有测试过,但它应该可以工作。另外,如果您想允许通过 HTTP 协议发出请求,则需要将

allow arbitary load
设置为
yes
App Transport Security Settings
中的
info.plist
)。

不推荐这样做,但对于开发来说这是很好的。

© www.soinside.com 2019 - 2024. All rights reserved.