我遇到了问题。我认为这完全归功于我的基础知识。我相信有人可以轻松地帮助我,让我朝着正确的方向前进。
我有不同的segues,并且都通过远程URL从JSON获取数据。 所以简而言之,所有segues都需要打开URL并解析JSON并将它们变成ARRAY
我做了第一个segue,它运行正常。 现在我计划使用下载JSON的函数并将其作为常用函数转换为ARRAY
我在stackoverflow上的另一个页面中读到了我可以在ViewController中声明类外的所有常用函数
我希望每个人都和我在一起。
现在在ViewController中我声明了一个函数
getDataFromJson(url: String)
此功能代码如下所示
func getJsonFromURL(url: String)
{
// some class specific tasks
// call the common function with URL
// get an array
let arrJSON = getJsonArrFromURL(url)
for element in arrJSON
{
// assign each element in json to ur table
print("Element: \(element)")
}
// some class specific tasks
}
这将调用在类
的分数之外声明的公共函数getArrFromJson(url: String) -> NSArray
这个常用功能非常通用。 获取URL,调用它,打开它,将其数据解析为ARRAY并将其返回。
我遇到的问题是把回报放在哪里 它返回空数组,因为任务没有完成,我无能为力
func getJsonArrFromURL(var url: String) -> NSArray
{
var parseJSON : NSArray?
if ( url == "" )
{
url = self.baseURLHomepage
}
print("Opening a JSON URL \(url)")
let myUrl = NSURL(string: url);
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "GET";
let postString = "";
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
{
data, response, error in
if ( error != nil )
{
print("Error open JSON url \n\(error)")
return
}
do
{
parseJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSArray
}
catch
{
self.showAlert("Error", msg: "Error occurred while trying to process the product information data")
print("Error occured in JSON = \(error)")
}
}
task.resume()
return parseJSON!
}
答案 0 :(得分:1)
您可以在任何课程中添加如下方法
"valueAxes": [{
"logarithmic": true
}]
并在任何地方访问
func post(url: String, info: String, completionHandler: (NSString?, NSError?) -> ()) -> NSURLSessionTask {
let URL = NSURL(string: url)!
let request = NSMutableURLRequest(URL:URL)
request.HTTPMethod = "GET"
let bodyData = info
request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
dispatch_async(dispatch_get_main_queue()) {
guard data != nil else {
print("response String is nil")
completionHandler(nil, error)
return
}
if let dataNew = data {
completionHandler(NSString(data: (NSData(base64EncodedData: dataNew, options: NSDataBase64DecodingOptions([])))!, encoding: NSASCIIStringEncoding), nil)
}
}
}
task.resume()
return task
}
扩展您的字符串,如下所示
let url = "your URL String"
let info = "The data you would like to pass"
yourClassName.post(url, info: info) { responseString, error in
guard responseString != nil else {
print("response String is nil")
print(error)
return
}
do {
if !(responseString as? String)!.isEmpty {
let json = try NSJSONSerialization.JSONObjectWithData((responseString as! String).data, options: NSJSONReadingOptions.init(rawValue: 0))
//process your json here
}
} catch {
print("Error\n \(error)")
return
}
}