gpt4 book ai didi

ios - 从 JSON 中提取值并传递给 Swift 中的另一个 ViewController

转载 作者:行者123 更新时间:2023-11-28 07:41:17 24 4
gpt4 key购买 nike

我正在尝试从 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)
}

}

最佳答案

您的代码似乎有两个问题。

1) 您的 API 调用是异步的,因此您在获得 API 响应之前执行 Segue。你要么实现一个回调函数,要么在获取值后写这行。

self.updateAgeData(json: AgeJSON)
performSegue(withIdentifier: "sendingAgeData", sender: self)

2) 您的变量“ageInDays”。您永远不会为该变量分配任何值。在 updateAgeData() 函数中,您正在创建一个局部变量。您的全局变量没有获得该值。

这样使用

self.ageInDays = (String((ageResult) * 365))

关于ios - 从 JSON 中提取值并传递给 Swift 中的另一个 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52180703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com