gpt4 book ai didi

json - 在函数内调用函数并返回字符串

转载 作者:行者123 更新时间:2023-11-30 14:10:47 25 4
gpt4 key购买 nike

我有一个名为 getEarthquake() 的函数,它使用 SwiftyJSON 解析 JSON 并返回所有组织的信息(例如 titlemagnitudetime)到名为 infoNSMutableArray 中。

var info = NSMutableArray()

func getEarthquake(completion: (results : NSMutableArray) ->Void) {
DataManager.getEarthquakeDataFromFileWithSuccess {
(data) -> Void in
let json = JSON(data: data)
if var JsonArray = json.array {
JsonArray.removeAtIndex(0)
for appDict in JsonArray {
var mag: String? = appDict["mag"].stringValue
var title: String? = appDict["title"].stringValue
var time: String? = appDict["time"].stringValue
var information = AppModel(title: title, magnitude: mag, time1: time)
info.addObject(information)
// info.removeRange(3...48)

completion(results: info)
}
}

}
}

我创建了另一个名为 getEarthquake2() 的函数,它调用 getEarthquake() 并检索info。在 getEarthquake2() 中,我希望它仅返回 title1,它是一个 String。然而,我的尝试仅导致 title1 在返回时为 nil

func getEarthquake2()->String? {
var title1: String?
getEarthquake{ (info) in

var title = info[0].title
title1 = title

}

return title1

}

有人可以在使 getEarthquake2() 成功返回不返回 nil 的 title1 时指导我正确的方向吗? (我确信这不是 Info 为零的问题,因为它是在 getEarthquake() 末尾填充的。)

我的 AppModel.swift 文件,我可以在其中轻松组织我的代码:

import Foundation
class AppModel: NSObject, Printable {
let title: String
let magnitude: String
let time1: String

override var description: String {
return "TITLE: \(title), TIME: \(time1), MAG: \(magnitude)"
}
init(title: String?, magnitude: String?, time1: String?) {
self.title = title ?? ""
self.time1 = time1 ?? ""
self.magnitude = magnitude ?? ""
}

}

我在其中调用 Web 服务的 DataManager.swift 文件:

import Foundation
let earthquakeURL = "http://www.kuakes.com/json/"
class DataManager {
class func getEarthquakeDataFromFileWithSuccess(success: ((websiteData: NSData) -> Void)) {
//1
loadDataFromURL(NSURL(string: earthquakeURL)!, completion:{(data, error) -> Void in
//2
if let urlData = data {
//3
success(websiteData: urlData)
}
else {
println("nothing")
}
})
}
class func loadDataFromURL(url: NSURL, completion:(data: NSData?, error: NSError?) -> Void) {
var session = NSURLSession.sharedSession()

// Use NSURLSession to get data from an NSURL
let loadDataTask = session.dataTaskWithURL(url, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
if let responseError = error {
completion(data: nil, error: responseError)
} else if let httpResponse = response as? NSHTTPURLResponse {
if httpResponse.statusCode != 200 {
var statusError = NSError(domain:"com.kuakes", code:httpResponse.statusCode, userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."])
completion(data: nil, error: statusError)
} else {
completion(data: data, error: nil)
}
}
})

loadDataTask.resume()
}







}

最佳答案

getEarthquake2 中,您忘记将对象转换为 AppModel:

func getEarthquake2() -> String? {
var title1: String?

getEarthquake { info in
let title = (info[0] as! AppModel).title
title1 = title
}

return title1
}

关于json - 在函数内调用函数并返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31798237/

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