加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用带字典数组的Dictionary进行Swift JSON解析

发布时间:2020-12-14 05:34:09 所属栏目:百科 来源:网络整理
导读:我是使用 Swift语言进行iOS开发的初学者.我有一个JSON文件包含如下数据. { "success": true,"data": [ { "type": 0,"name": "Money Extension","bal": "72 $","Name": "LK_Mor","code": "LK_Mor","class": "0","withdraw": "300 $","initval": "1000 $" },{
我是使用 Swift语言进行iOS开发的初学者.我有一个JSON文件包含如下数据.
{
    "success": true,"data": [
             {
                 "type": 0,"name": "Money Extension","bal": "72 $","Name": "LK_Mor","code": "LK_Mor","class": "0","withdraw": "300 $","initval": "1000 $"
             },{

             },]
}

我想解析这个文件,并且必须返回包含JSON文件中数据的字典.这是我写的方法.

enum JSONError: String,ErrorType {
    case NoData = "ERROR: no data"
    case ConversionFailed = "ERROR: conversion from JSON failed"
}

func jsonParserForDataUsage(urlForData:String)->NSDictionary{
    var dicOfParsedData :NSDictionary!
    print("json parser activated")
    let urlPath = urlForData
    let endpoint = NSURL(string: urlPath)
    let request = NSMutableURLRequest(URL:endpoint!)
            NSURLSession.sharedSession().dataTaskWithRequest(request) { (data,response,error) -> Void in
                do {

                    guard let dat = data else {
                        throw JSONError.NoData
                    }
                    guard let dictionary: NSDictionary = try NSJSONSerialization.JSONObjectWithData(dat,options:.AllowFragments) as? NSDictionary else {
                        throw JSONError.ConversionFailed
                    }

                    print(dictionary)
                    dicOfParsedData = dictionary

                } catch let error as JSONError {
                    print(error.rawValue)
                } catch {
                    print(error)
                }
                }.resume()

          return dicOfParsedData

}

当我修改此方法以返回字典时,它总是返回nil.我该如何修改这个方法.

您无法返回异步任务.你必须使用回调.

像这样添加一个回调:

completion: (dictionary: NSDictionary) -> Void

到您的解析器方法签名:

func jsonParserForDataUsage(urlForData: String,completion: (dictionary: NSDictionary) -> Void)

并调用您想要“返回”的数据可用的完成:

func jsonParserForDataUsage(urlForData: String,completion: (dictionary: NSDictionary) -> Void) {
    print("json parser activated")
    let urlPath = urlForData
    guard let endpoint = NSURL(string: urlPath) else {
        return
    }
    let request = NSMutableURLRequest(URL:endpoint)
    NSURLSession.sharedSession().dataTaskWithRequest(request) { (data,error) -> Void in
        do {

            guard let dat = data else {
                throw JSONError.NoData
            }
            guard let dictionary = try NSJSONSerialization.JSONObjectWithData(dat,options:.AllowFragments) as? NSDictionary else {
                throw JSONError.ConversionFailed
            }

            completion(dictionary: dictionary)

        } catch let error as JSONError {
            print(error.rawValue)
        } catch let error as NSError {
            print(error.debugDescription)
        }
    }.resume()

}

现在,您可以将此方法与尾随闭包一起使用以获取“返回”值:

jsonParserForDataUsage("http...") { (dictionary) in
    print(dictionary)
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读