2017-10-03 2 views
1

Mein Code funktionierte perfekt vor Swift 4, ich analysiere gerade eine einfache JSON-Datei, und ich ordne alles in meine Modellklasse ein.Swift 4 - Problem mit ObjectMapper beim Analysieren von JSON

Hier ist mein Beispielcode:

Als erstes habe ich meine Json-Datei.

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

Dann kann ich es analysieren.

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... 
      }) 
} 

Jetzt kann ich zeige dir meine Zone Klasse

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"] 
    } 

Sie auch meine brauche meine JSON-Datei, um zu sehen:

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

Ich abstürzt, weil parsedZones null ist. Ich weiß, dass ich auf Null überprüfen kann, aber es funktionierte auf Swift 3 und ich änderte nichts vor der Konvertierung zu Swift 4. In Bezug auf meine JSON-Datei sollte es nicht Null sein.

Kann ich Hilfe haben?

+0

'JSONEncoder/Decoder' in Swift 4 macht' ObjectMapper' ziemlich veraltet;) – vadian

+0

Können Sie das konkretisieren @vadian sein? Ich bin sehr interessiert – Balanced

+1

Bitte beachten Sie die WWDC-Videos über Was ist neu in Swift und Foundation. – vadian

Antwort

0

Sie haben wie folgt zu verwenden:

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