所以我用 swift 编写了一个函数,它从 JSON api 给我一个数值。我的问题是如何从函数中获取值,以便以更实际的方式使用它。
override func viewDidLoad() {
super.viewDidLoad()
getJSON()
}
func getJSON(){
let url = NSURL(string: baseURL)
let request = NSURLRequest(URL: url!)
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in
if error == nil{
let swiftyJSON = JSON(data: data!)
let usdPrice = swiftyJSON["bpi"]["USD"]["rate"].doubleValue
print(usdPrice)
}else{
print("There was an error!")
}
让 usdPrice 为我获取值,那么我如何从函数 getJSON() 中获取该值并对其进行处理,例如将其归因于 Main.storyboard 中的某个标签
最佳答案
很遗憾,其他答案不正确。仅返回一个值是行不通的,因为您是从 dataTaskWithRequest
的完成闭包中获取值。
return usdPrice
语句应该是编译器错误,因为完成闭包没有返回值。
您需要将自己的完成闭包添加到 getJSON
以获取 double 作为参数。
override func viewDidLoad() {
super.viewDidLoad()
getJSON { (usdPrice) -> Void in
// do something with usdPrice
print(usdPrice)
}
}
func getJSON(completion: (Double) -> Void) {
let url = NSURL(string: baseURL)
let request = NSURLRequest(URL: url!)
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in
if error == nil{
let swiftyJSON = JSON(data: data!)
let usdPrice = swiftyJSON["bpi"]["USD"]["rate"].doubleValue
completion(usdPrice)
} else {
print("There was an error!")
}
}
关于ios - 如何在swift中从函数中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34599259/