2016-11-07 19 views
0

SwiftyJSONは、さまざまな方法(CocoaPods、Carthageなど)でインポート可能なSwiftの非常に便利なアドオンです。一般的にJSONファイルが必要なので、多くのプロジェクトで使用しています。だから、私は必要な引数で呼び出すことができ、JSONファイルから生のString値を得ることができる素敵なシンプルな関数が必要でした。ここでシンプルなgetJSON()関数

答えて

0

は、私が作成した関数は、この関数の使用例は、

func getJSON(value: [String], fileName: String) -> String{ 
    guard let path = Bundle.main.path(forResource: fileName, ofType: "json"), 
     let jsonData = NSData(contentsOfFile: path) else{ 
      print("Couldn't find the file on disk or failed to read it") 
      return "ERR." 
    } 

    let jsonObject = JSON(data: jsonData as Data) 

    guard let jsonValue = jsonObject[value].string else{ 
     print("FAILED to find JSON object") 
     return "ERR." 
    } 

    return jsonValue 

} 

...(もちろん、正しくお使いのXcodeスウィフトプロジェクト内に統合することがSwiftJSONを必要としない)それを自分で使用すること自由に感じ、考えていますlet myJsonValue = getJSON(value: ["people","person1"], fileName: "database")となります。person1グループの値がdatabase.jsonというJSONファイルになります。だから、database.jsonファイルはこの

{ 
    "people" : { 
     "person1" : "Bob", 
     "person2" : "Steve", 
     "person3" : "Alan", 
    } 
} 

ようなものに見えた場合、関数は、これは誰にも助けている、またはあなたはそれのための任意の提案を持っているならば、私に知らせてください"Bob"

希望の値を返します!建設的な批判は常に高く評価された。

1

我々はその内の1つのコンストラクタメソッドであるプロトコルを作成するステップ1とモデルクラス

protocol JSONable { 
    init?(parameter: JSON) 
} 

class Style: JSONable { 
    let ID    :String! 
    let name   :String! 

    required init(parameter: JSON) { 
     ID   = parameter["id"].stringValue 
     name   = parameter["name"].stringValue 
    } 

    /* JSON response format 
    { 
     "status": true, 
     "message": "", 
     "data": [ 
     { 
      "id": 1, 
      "name": "Style 1" 
     }, 
     { 
      "id": 2, 
      "name": "Style 2" 
     }, 
     { 
      "id": 3, 
      "name": "Style 3" 
     } 
     ] 
    } 
    */ 
} 

ステップ2.我々は、クラス型オブジェクト

extension JSON { 
    func to<T>(type: T?) -> Any? { 
     if let baseObj = type as? JSONable.Type { 
      if self.type == .array { 
       var arrObject: [Any] = [] 
       for obj in self.arrayValue { 
        let object = baseObj.init(parameter: obj) 
        arrObject.append(object!) 
       } 
       return arrObject 
      } else { 
       let object = baseObj.init(parameter: self) 
       return object! 
      } 
     } 
     return nil 
    } 
} 
をモデル化するためにJSONを変換するJSONの拡張を作成します

ステップ3. Alamofireまたは他のコードでコードを使用します。

Alamofire.request(.GET, url).validate().responseJSON { response in 
     switch response.result { 
      case .success(let value): 
       let json = JSON(value) 

       var styles: [Style] = [] 
       if let styleArr = json["data"].to(type: Style.self) { 
        styles = styleArr as! [Style] 
       } 
       print("styles: \(styles)") 
      case .failure(let error): 
       print(error) 
     } 
} 

これが役立つことを願っています。

詳細については、このリンクを参照してください。
https://github.com/SwiftyJSON/SwiftyJSON/issues/714

関連する問題