Синтаксический анализ Gloss неожиданно обнаружил ноль

#json #swift #parsing #null

#json #swift #синтаксический анализ #null

Вопрос:

У меня есть такой объект, который является Dictionary<String,AnyObject> :

 ["velocity": 0.0, "constant_b": 0.0, "created_at": 2016-10-10T01:02:04Z, "shot_date": 2016-10-08T00:29:52.596 00:00, "time": 2016-10-10T01:02:04Z, "shot_origin_y": 0.0, "peak_ball_height": 0.0, "shot_origin_x": 0.0, "made": null, "date": 2016-10-10T01:02:04Z, "constant_a": 0.0, "shot_length": 0.0, "ball_position_y": 0.0, "lr": 0.0, "depth": 0.0, "id": 2517999, "clean_make": null, "location_id": 1, "player_id": null, "ball_position_x": 0.0, "entry_angle": 0.0, "constant_c": 0.0]
  

При передаче в мой объект таким образом (для этого используется GLOSS, cocoapod для синтаксического анализа объектов JSON):

 Shot(json: shotJSON)
  

Я неожиданно обнаружил ноль при развертывании необязательного значения, но идентификатор явно присутствует и является четким и целым числом.

Вот объект gloss:

 import Foundation
import Gloss

class Shot: Decodable, FAURequestsDecodable, Equatable{

    let id:Int
    let velocity:Double?
    let time:NSDate?
    let shotOriginY:Double?
    let shotOriginX:Double?
    let shotLength:Double?
    let shotDate:NSDate?
    let playerId:Int?
    let peakBallHeight:Double?
    let made:Bool?
    let lr:Double?
    let locationId:Int?
    let entryAngle:Double?
    let depth:Double?
    let date:NSDate?
    let createdAt:NSDate?
    let constantC:Double?
    let constantB:Double?
    let constantA:Double?
    let cleanMake:Bool?
    let ballPositionY:Double?
    let ballPositionX:Double?

    let dateFormatter = NSDateFormatter()

    //Mark: - Deserialization
    required init?(json: JSON){
        self.id = ("id" <~~ json)!
        self.velocity = "velocity" <~~ json
        self.shotOriginY = "shot_origin_y" <~~ json
        self.shotOriginX = "shot_origin_x" <~~ json
        self.shotLength = "shot_length" <~~ json
        self.playerId = "player_id" <~~ json
        self.peakBallHeight = "peak_ball_height" <~~ json
        self.made = "made" <~~ json
        self.lr = "lr" <~~ json
        self.locationId = "location_id" <~~ json
        self.entryAngle = "entry_angle" <~~ json
        self.depth = "depth" <~~ json
        self.constantC = "constant_c" <~~ json
        self.constantB = "constant_b" <~~ json
        self.constantA = "constant_a" <~~ json
        self.cleanMake = "clean_make" <~~ json
        self.ballPositionY = "ball_position_y" <~~ json
        self.ballPositionX = "ball_position_x" <~~ json

        dateFormatter.dateFormat = "yyyy-dd-MM'T'HH:mm:ss'Z'"
        self.createdAt = Decoder.decodeDate("created_at", dateFormatter: dateFormatter)(json)
        self.date = Decoder.decodeDate("date", dateFormatter: dateFormatter)(json)
        self.time = Decoder.decodeDate("time", dateFormatter: dateFormatter)(json)

        dateFormatter.dateFormat = "yyyy-dd-MM'T'HH:mm:ss.SSS"
        self.shotDate = Decoder.decodeDate("shot_date", dateFormatter: dateFormatter)(json)
    }
}
  

Комментарии:

1. Вы уверены, что это та строка, в которой происходит сбой? Может ли быть проблема с реализацией вашего пользовательского <~~ оператора? Может ли быть проблема с построением вашего JSON объекта?

2. Он использует GLOSS, cocoapod. Оператор определен в этом и отлично работает для всех других моих декодируемых объектов. Это только один синтаксический анализ, который умирает. И да, это self.id = строки. В инициализации нет других необязательных параметров, и отладчик также отмечает эту строку, @MatthewSeaman.