我正在通过使用swift创建的API进行URL调用,如下所示:
class API {
let apiEndPoint = "endpoint"
let apiUrl:String!
let consumerKey:String!
let consumerSecret:String!
var returnData = [:]
init(){
self.apiUrl = "https://myurl.com/"
self.consumerKey = "my consumer key"
self.consumerSecret = "my consumer secret"
}
func getOrders() -> NSDictionary{
return makeCall("orders")
}
func makeCall(section:String) -> NSDictionary{
let params = ["consumer_key":"key", "consumer_secret":"secret"]
Alamofire.request(.GET, "\(self.apiUrl)/\(self.apiEndPoint + section)", parameters: params)
.authenticate(user: self.consumerKey, password: self.consumerSecret)
.responseJSON { (request, response, data, error) -> Void in
println("error \(request)")
self.returnData = data! as NSDictionary
}
return self.returnData
}
}
我在我调用此API时UITableViewController
使用SwiftyJSON库填充表。但是,我returnData
的API始终为空。Alomofire调用没有问题,因为我可以成功检索值。我的问题是我应该如何将其data
转移到表视图控制器?
var api = API()
api.getOrders()
println(api.returnData) // returnData is empty
正如mattt指出的那样,Alamofire通过“完成处理程序”模式异步返回数据,因此您必须执行相同的操作。您不能只是return
立即获取值,而是要更改方法以不返回任何内容,而要使用完成处理程序关闭模式。
如今,它可能看起来像:
func getOrders(completionHandler: @escaping (Result<[String: Any]>) -> Void) {
performRequest("orders", completion: completionHandler)
}
func performRequest(_ section: String, completion: @escaping (Result<[String: Any]>) -> Void) {
let url = baseURL.appendingPathComponent(section)
let params = ["consumer_key": "key", "consumer_secret": "secret"]
Alamofire.request(url, parameters: params)
.authenticate(user: consumerKey, password: consumerSecret)
.responseJSON { response in
switch response.result {
case .success(let value as [String: Any]):
completion(.success(value))
case .failure(let error):
completion(.failure(error))
default:
fatalError("received non-dictionary JSON response")
}
}
}
Then, when you want to call it, you use this completion
closure parameter
(in trailing closure, if you want):
api.getOrders { result in
switch result {
case .failure(let error):
print(error)
case .success(let value):
// use `value` here
}
}
// but don't try to use the `error` or `value`, as the above closure
// has not yet been called
//
问题内容: 考虑表学生: 使用以下查询,我们得到: 由此我们将得到: 我们如何得到类似的东西 问题答案: 这应该做的工作
问题内容: 我有一个返回信息菜单(基本上是菜单,menu_headers和项)的应用程序。我想要这样的东西: 那会返回一个菜单,但是我想我需要在这里完成处理程序。 我目前有: 但是我实际上该如何退货?我99%确信这是某种类型的完成处理程序,但是,对于Swift和Alamofire来说,这是我的新手,我有点迷失了。我已经知道我无法使用Swift中的Alamofire返回值,但是知道其中某些值很快就会
问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 我想从URL获取值,以按ID从数据库中选择数据。我想要ID值。 例如,如果我打开数据库, 我想获取id = 12的值。 如果我打开,则 获取数据库中id = 7的值,依此类推。 我有一些代码: 问题答案: 网址: 码:
问题内容: 当我调试此代码时,在databaseUser中dataSnapshot在数据库中具有User的值,但是在object中,未添加,则全部为null。而且我不明白,因为在对象事件中正常接收值。 我的数据库用户,目前仅用于测试: 和方法,只是选择另一个活动的事件的关键: 问题答案: 当您对Firebase数据库执行查询时,可能会有多个结果。通过附加a,您可以在一个快照中获得这些结果,因此快照
我成功地使用了BenjaminRH的jQuery-ticker。它在提示字段提交后被激发,但是一旦ticker运行了一次并且需要再次被激发,它就不被激发了。 该报价器以以下方式启动 我试图用 没有成功。帮助是非常宝贵的。多谢了。
本文向大家介绍Markdown 报价单,包括了Markdown 报价单的使用技巧和注意事项,需要的朋友参考一下 示例 通过添加>一行,您可以创建带引号的文本! 我是个报价!