我正在尝试从JSON中提取一个数字(ageInDays),然后将其传递给另一个View Controller。
如果我打印ageInDays,它将打印正确的答案,但是当我尝试将其传递给另一个VC时将返回nil,但是如果我将默认值传递给另一个VC,则它通过不会有问题。 我正在使用Alamofire和SwiftyJSON
我只包含了网络,解析和发送部分。
基本上,该应用程序会根据统计数据大致告诉您您还剩下多少天可以居住(这足以吓我一跳,一般情况下,我会做更多。)
var ageInDays = ""
//MARK: - Networking
func getAgeData(url: String){
Alamofire.request(url, method: .get)
.responseJSON { response in
if response.result.isSuccess {
print("Yes! We have the data!")
let AgeJSON: JSON = JSON(response.result.value!)
self.updateAgeData(json: AgeJSON)
} else {
print("Error: \(String(describing: response.result.error))")
self.warningLabel.text = "Sorry, connection issues."
}
}
}
//MARK: - JSON Parsing
func updateAgeData(json: JSON) {
if let ageResult = json["remaining_life_expectancy"].double{
let ageInDays = (String((ageResult) * 365))
print(ageInDays)
} else {
warningLabel.text = "Error: parsing JSON"
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let viewController = segue.destination as! ViewController
viewController.ageFromSettings = ageInDays
}
@IBAction func calculateButtonPressed(_ sender: Any) {
dateNowAsURL()
if count > 0 {
finalURL = "\(baseUrl)\(sex)\(URLcountry)\(URLdate)\(URLage)"
print(finalURL)
getAgeData(url: finalURL)
}
if ageInDays != ""{
performSegue(withIdentifier: "sendingAgeData", sender: self)
}
}
答案 0 :(得分:0)
您的代码似乎有两个问题。
1)您的API调用是异步的,因此您在获得API响应之前正在执行Segue。您应该实现回调函数或在获取值后写此行。
self.updateAgeData(json: AgeJSON)
performSegue(withIdentifier: "sendingAgeData", sender: self)
2)您的变量“ ageInDays”。您永远不会为该变量分配任何值。在updateAgeData()函数中,您正在创建一个局部变量。您的全局变量没有获得该值。
像这样使用它
self.ageInDays = (String((ageResult) * 365))
答案 1 :(得分:0)
我的代码有2个问题:
由于Alamofire是异步的,因此必须在数据恢复后执行segue。
最大的问题实际上是确保通过segue发送的数据采用所需的形式。在这种情况下,它是Int而不是String。