swift 线程1:信号SIGABRT alamofire

up9lanfz  于 12个月前  发布在  Swift
关注(0)|答案(1)|浏览(123)

我对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
我真的不明白问题出在哪里,做一个“同步”功能很难,也许我做错了。
我的目标是将请求的结果存储在我返回的变量中。有人能帮忙吗?

ee7vknir

ee7vknir1#

我建议你将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)
    }
}

字符串
如果需要传递parametersheaders,只需将其添加到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)
     }
}


我还没有测试过,但它应该工作.另外,你需要设置allow arbitary loadyesinfo.plist中的App Transport Security Settings)如果你想允许通过HTTP协议的请求.
这是不推荐的,但它对开发很好。

相关问题