【发布时间】:2016-07-29 04:51:46
【问题描述】:
我正在使用 Alamofire 连接 API,取回 JSON 对象,将其分配给变量,然后尝试显示它。问题是该变量显示为空,因为它试图在从服务器取回值之前显示。
这是我的 Networking.swift 文件:
class Networking {
class func postPurchase() {
let parameters = [
"login_user": "admin@poqeta.com",
"login_password": "p0q3t4",
"item_id": 5,
"machine_token": "/HyZyq2FgU4RONnDlzPXWA==",
"amount": 1
]
Alamofire.request(.POST, "http://poqeta.herokuapp.com/api/v1/purchases/add_item", parameters: parameters, encoding: .JSON)
.responseData { response in
print(response.request)
print(response.response)
print(response.result)
}
}
class func confirmPurchase() -> String {
var token:String = " "
Alamofire.request(.POST, "http://poqeta.herokuapp.com/api/v1/purchases/purchase", parameters: ["login_user": "admin@poqeta.com", "login_password": "p0q3t4"])
.responseJSON { response in
switch response.result {
case .Success(let data):
let json = JSON(data)
let dispenseToken:String = json["token"].stringValue
print(dispenseToken)
token = dispenseToken
case .Failure(let error):
print("Request failed with error: \(error)")
return
}
}
return token
}
这是试图获取变量并显示它的函数(使用 PopUpViewControllerSwift):
@IBAction func showPopUp(sender: AnyObject) {
var purchase_token:String = " "
Networking.postPurchase()
purchase_token = Networking.confirmPurchase()
let bundle = NSBundle(forClass: PopUpViewControllerSwift.self)
if (UIDevice.currentDevice().userInterfaceIdiom == .Pad)
{
self.popViewController = PopUpViewControllerSwift(nibName: "PopUpViewController_iPad", bundle: bundle)
self.popViewController.title = "Purchase Complete"
self.popViewController.showInView(self.view, withImage: nil, withMessage: "Your purchase token is " + purchase_token, animated: true)
} else
{
if UIScreen.mainScreen().bounds.size.width > 320 {
if UIScreen.mainScreen().scale == 3 {
self.popViewController = PopUpViewControllerSwift(nibName: "PopUpViewController_iPhone6Plus", bundle: bundle)
self.popViewController.title = "Purchase Complete"
self.popViewController.showInView(self.view, withImage: nil, withMessage: "Your purchase token is " + purchase_token, animated: true)
} else {
self.popViewController = PopUpViewControllerSwift(nibName: "PopUpViewController_iPhone6", bundle: bundle)
self.popViewController.title = "Purchase Complete"
self.popViewController.showInView(self.view, withImage: nil, withMessage: "Your purchase token is " + purchase_token, animated: true)
}
} else {
self.popViewController = PopUpViewControllerSwift(nibName: "PopUpViewController", bundle: bundle)
self.popViewController.title = "Purchase Complete"
self.popViewController.showInView(self.view, withImage: nil, withMessage: "Your purchase token is " + purchase_token, animated: true)
}
}
}
提前感谢您的任何建议!
【问题讨论】:
-
您将需要更改 confirmPurchase 以包含完成处理程序:此处建议类似的内容:stackoverflow.com/questions/36416163/…
标签: ios swift asynchronous alamofire