Swift 2.0 Alamofire完成处理程序返回Json

3
我的目标是创建一个简单的函数,我可以传入一个url,然后它会返回一个JSON。我查找了一些资料,发现很少有使用Alamofire实现完成处理程序的示例。
我还使用Swifty Json来帮助解析它。
我该如何将我这里的内容转换为一个函数,以便它能够返回我的Json?
func request() {
    Alamofire.request(.GET, API_END_POINT)
    .responseJSON {
        response in

        // swiftyJsonVar is what I would like this function to return.
        let swiftyJsonVar = JSON(response.result.value!)
    }
}

你有什么问题? - Breek
我编辑了我的描述:我该如何将这里的内容转换为一个函数,以便它返回我的Json? - gradedcatfood
1个回答

9

Swift 3+ and Alamofire 4+

 // Call function
    myFunction("bodrum") { response in
      print(response["yourParameter"].stringValue)
    }

    // POST
    func myFunction(_ cityName:String, completion: @escaping (JSON) -> ()) {

      let token = "token"
      let parameters = ["city" : cityName]
      let headers = ["Authorization": "token"]
      let url = URL(string: "url")!
      let reqUrl = URLRequest(url: url)

      Alamofire.request(reqUrl, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers)
        .validate()
        .responseJSON { response in
          switch response.result {
          case .Success:
            let jsonData = JSON(data: response.data!)
            completion(jsonData)
          case .Failure(let error):
            MExceptionManager.handleNetworkErrors(error)
            completion(JSON(data: NSData()))
          }
      }
    }

Swift 2 and Alamofire 3+

// POST
func myFunction(cityName:String, completion : (JSON) -> ()) {
  Alamofire.request(.POST, "url", parameters: ["city" : cityName], encoding: ParameterEncoding.JSON, headers: ["Authorization": "token"])
    .validate()
    .responseJSON { response in
      switch response.result {
      case .Success:
        let jsonData = JSON(data: response.data!)
        completion(jsonData)
      case .Failure(let error):
        MExceptionManager.handleNetworkErrors(error)
        completion(JSON(data: NSData()))
      }
  }
}

// GET
func myFunction(cityName:String, completion : (JSON) -> ()) {
  Alamofire.request(.GET, "url", parameters: ["param1" : cityName], headers: ["Authorization": "token"])
    .validate()
    .responseJSON { response in
      switch response.result {
      case .Success:
        let jsonData = JSON(data: response.data!)
        completion(jsonData)
      case .Failure(let error):
        MExceptionManager.handleNetworkErrors(error)
        completion(JSON(data: NSData()))
      }
  }
}

// Call function
myFunction("bodrum") { response in
  print(response["yourParameter"].stringValue)
}

这看起来很不错!但你能展示一下如何正确调用它吗?我觉得这并不像这么简单:var json = myFunction("myParam")。 - gradedcatfood
太棒了!它像魔法一样运行,只需要处理一下失败情况,因为出现了未解决的标识符,但这不是什么大问题,非常感谢 :) - gradedcatfood
@fatihyildizhan,你能否更新你的代码以适应Alamofire 4.0和Swift 3吗? - pmb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接