在SWIFT 2.0

时间:2015-11-26 08:27:17

标签: ios arrays json swift

我遇到了问题。我认为这完全归功于我的基础知识。我相信有人可以轻松地帮助我,让我朝着正确的方向前进。

我有不同的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!

}

1 个答案:

答案 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
            }
        }