2016-04-04 12 views
2

iOS diliyle birlikte Swift diliyle yeni başlayan biriyim. Aşağıdaki gibi bir JSON dosyası var.Swift JSON Sözlükler Dizini ile Sözlük ile ayrıştırma

{ 
    "success": true, 
    "data": [ 
      { 
       "type": 0, 
       "name": "Money Extension", 
       "bal": "72 $", 
       "Name": "LK_Mor", 
       "code": "LK_Mor", 
       "class": "0", 
       "withdraw": "300 $", 
       "initval": "1000 $" 
      }, 
      { 

      }, 
      { 

      }, 
      ] 
} 

Bu dosyayı ayrıştırmak ve JSON dosyasındaki verileri içeren sözlüğü döndürmek zorundayım. Bu benim yazdığım yöntem.

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 

} 

Bir sözlüğü döndürmek için bu yöntemi değiştirdiğimde, her zaman sıfırlanır. Bu yöntemi nasıl değiştirebilirim.

+0

Hata nedir? –

+0

@BlakeLockley son noktayı tanımlamak için kullanılan koruma bildirimi bana hata veriyor. Nasıl çözüleceğini bilmiyorum – madhev

+0

Belki de URL'niz yanlış bir biçimde mi? Bizimle paylaşabilir misiniz? –

cevap

1

Eşzamansız bir görev için return yapamazsınız. Bunun yerine bir geri arama kullanmalısınız.

böyle bir geri arama ekleyin:

: verilerinin sizin "dönüş" kullanılabilir istediğiniz tamamlanmasını

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

ve çağrı: senin ayrıştırıcı yöntem imzası

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, response, 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() 

} 

Artık "döndürülen" değeri almak için bu yöntemi arka kapak ile kullanabilirsiniz:

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

yardım edin. İşe yarıyor – madhev