2017-10-03 8 views
1

Swift 4より前にコードが完全に動作していました。単純なJSONファイルを解析しています。すべてをモデルクラスにマッピングしています。Swift 4 - JSONの解析中にObjectMapperを使用する

これは私のコード例です:

まずはjsonファイルを取得します。

if let path = Bundle.main.path(forResource: "myFile", ofType: "json") { } 

次に解析することができます。 parsedZonesがnilであるので、私はクラッシュしています

{ 
    "info": { 
     .... 
     .... 
    }, 
    "zones": [{ 
     "code": "EN" 
    }], 
} 

do { 
     let jsonData = try Data(contentsOf: URL(fileURLWithPath: path), options: NSData.ReadingOptions.mappedIfSafe) 
     let json = JSON(data: jsonData) 

     if let jsonZones = json["zones"].array { 
      let parsedZones = Mapper<Zone>().mapArray(JSONObject: jsonZones.description) 
      parsedZones?.forEach({ (element) -> Void in 
       // Do stuff... 
      }) 
} 

は今、私は

class Zone: Object, Mappable { 

    @objc dynamic var code: String? 

    required convenience init?(map: Map) { 
     self.init() 
     mapping(map: map) 
    } 

    func mapping(map: Map) { 
     code <- map["code"] 
    } 

あなたに私のゾーンクラスを表示することができますまた、私のJSONファイルを見るために私が必要になります。 私はnilを確認できますが、Swift 3で作業していましたが、Swift 4に変換する前に何も変更していません。 JSONファイルに関しては、nilであってはいけません。

助けてもらえますか?

+0

'スウィフト4でJSONEncoder/Decoder'がObjectMapper'はかなり時代遅れ'作る;) – vadian

+0

あなたはより具体的な@vadianことはできますか?私は非常に興味があります – Balanced

+1

SwiftとFoundationの新機能についてのWWDCビデオをご覧ください。 – vadian

答えて

0

あなたはこのように使用する必要があります:

if let jsonZones = json["zones"].arrayObject { 
    let parsedZones = Mapper<Zone>().mapArray(JSONObject: jsonZones) 
    parsedZones?.forEach({ (element) -> Void in 
     print(element.code) 
    }) 
} 
関連する問題