2016-04-04 10 views
2

私はSwift言語でiOS開発の初心者です。 JSONファイルには以下のデータが含まれています。辞書の配列でスウィフトJSONの解析

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

      }, 
      { 

      }, 
      ] 
} 

このファイルを解析し、そのデータを含む辞書をJSONファイルに戻す必要があります。これは私が書いた方法です。

このメソッドを変更して辞書を返すと、常にnilが返されます。どのようにしてこのメ​​ソッドを変更できますか?

+0

エラーは何ですか? –

+0

@BlakeLockleyエンドポイントを定義するために使用されるガードステートメントでエラーが発生します。私はそれを解決する方法を知らない – madhev

+0

あなたのURLパスが間違ったフォーマットになっているのでしょうか?私たちと分かち合うことができますか? –

答えて

1

非同期タスクの場合はreturnにできません。代わりにコールバックを使用する必要があります。

このようなコールバック追加:

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

} 

"戻り値"を取得するには、後続のクロージャでこのメソッドを使用できます。

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

ありがとうございます。それは働いている – madhev

関連する問題