使用 alomafier 请求调用 api 在响应中获取数据,但在请求下方它会变为空白
Posted
技术标签:
【中文标题】使用 alomafier 请求调用 api 在响应中获取数据,但在请求下方它会变为空白【英文标题】:Call api using alomafier request get data inside a response but below request it get blank 【发布时间】:2016-11-15 12:07:22 【问题描述】:我调用此函数,我从 alomafier 请求中获得 json 响应,但是当我声明全局变量并将数据存储在从结果中获取的变量中,但在响应循环下方打印变量时,它会变为空白或为零。
我使用字典数组但没有得到解决方案。
Alamofire.request(url,method: .post).responseJSON response in
var data1 = response.result.value ---- I get response here but not get result outside of the loop
代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cellIdentifier = "Cell"
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! CustomTableViewCell_view
var domain:[[String:String]] = []
var asyncObj:Operations = Operations()
var url:String = asyncObj.getUrl("ticket", operation: "get_domain", filter: "")
Alamofire.request(url,method: .post).responseJSON response in
var data1 = response.result.value
//let data1 = response.data
if(data1 != nil)
var json1 = JSON(data1!)
GlobalVar.myvar = 10
let count: Int? = json1.array?.count
var departmentList = [DEPARTMENT]()
for index in 0 ..< count!
var domainid = json1[index]["domain_id"]
var domainname = json1[index]["domain_name"].stringValue
self.numbers.append(count!)
cell.nameLabel.text = "- "+domainname
var url:String = asyncObj.getUrl("ticket", operation: "get_department", filter: "vis_filter=avis_domain.domain_id=\(domainid)")
Alamofire.request(url,method: .post).responseJSON response in
var data2 = response.result.value
var departmentList:[[String:String]] = []
if data2 != nil
var json2 = JSON(data2!)
var count2: Int? = json2.array?.count
for index2 in 0 ..< count2!
var departmentid = json2[index2]["department_id"]
var departmentname = json2[index2]["department_name"]
//departmentList.append(["departmentid": "\(departmentid)", "departmentname": "\(departmentname)"])
cell.addressLabel.text = "- "+"\(departmentname)";
var url:String = asyncObj.getUrl("ticket", operation: "get_department_status_list", filter: "vis_department=\(departmentid)")
Alamofire.request(url,method: .post).responseJSON response in
var data3 = response.result.value
if data3 != nil
var json3 = JSON(data3!)
var statusList:[[String:String]] = []
var count3: Int? = json3.array?.count
for index3 in 0 ..< count3!
var statusid = json3[index3]["status_id"]
var statusname = json3[index3]["status_name"]
cell.status.text = "- "+"\(statusname)";
var url:String = asyncObj.getUrl("ticket", operation: "get_tickets", filter: "vis_filter=status_id=\(statusid)&\(VIS_PREFIX)ticket.department_id=\(departmentid)")
Alamofire.request(url,method: .post).responseJSON response in
var data4 = response.result.value
var tcount: Int?
var ticketcount:Int = 0
if data4 != nil
var json4 = JSON(data4!)
tcount = json4.array?.count
for index3 in 0 ..< tcount!
ticketcount = ticketcount + 1
/*let hotelName = hotelNames[(indexPath as NSIndexPath).row]
cell.nameLabel.text = hotelName
cell.addressLabel.text = hotels[hotelName]
*/
return cell
【问题讨论】:
这个问题很难理解。有很多错别字(“alomafier”),根本不清楚您期望发生什么以及实际发生什么。 您在调用 API 时使用了错误的方法。您只需要创建一个带有 alamofire 请求功能的网络类,当您调用此方法时,只需将完成处理程序传递给它并获取所有响应。 【参考方案1】:我不确定您要问什么,但听起来您希望全局变量会立即更新。实际上,只有在收到响应后才会更新。
这是一个例子:
var status = "Nothing much"
Alamofire.request("https://example.org/something").responseJSON response in
// This code runs in the future, probably after a few seconds
status = "Got a response!"
// This code runs immediately
print(status) // Prints "Nothing much"
在这里,状态(如您的全局变量)被初始化为一个值。接下来,发送一个 Alamofire 请求,并带有一个最终更新状态变量的响应回调。但是,程序在继续之前不会等待响应进来。这就是下一行打印出“Nothing much”的原因。
【讨论】:
输出没什么大不了的。那我该怎么办。 你应该学习异步编程。如果您使用 Alamofire,这是一个非常重要的概念。您可以从raywenderlich.com/121540/alamofire-tutorial-getting-started 开始 先生,我试过 tableView.reloaddata() ,它的工作,但问题是它显示响应无限循环以上是关于使用 alomafier 请求调用 api 在响应中获取数据,但在请求下方它会变为空白的主要内容,如果未能解决你的问题,请参考以下文章
NodeJ使用请求承诺来调用外部API,从响应主体中保存数据