无法调用类型Trip的值到类型Json

时间:2017-09-12 09:59:23

标签: json swift struct swift3 compiler-errors

我有一个结构如下:

struct Trip {
    var status: Int?
    var name: Int?
    var id: Int?
    var petId: [Int]
    var timeStart: Int?
}

我使用此结构使用此函数从Json加载数据。

func startTrips( _ petIdss: [Int], callback: @escaping ApiTrip) {
    let data = ["pets" : petIdss]
    APIManager.instance.perform(call: .startTrip, with: data) { (error, json) in
        if let error = error {
            callback(error, nil)
        } else if let data = json{

            callback(nil, Trip(data))
        }

    }

}

但是当我尝试在回调中将其类型转换为Trip时callback(nil, Trip(data)) 我要么

  

缺少参数

的参数

如果我按原样保留结构或初始化选项。如果我将结构中的所有参数转换为选项,我得

  

无法调用Trip类型的值进入类型Json。

所以我不确定这里有什么问题?

1 个答案:

答案 0 :(得分:0)

如果您没有为结构指定初始化程序,则您唯一可以访问的是成员智能初始化程序。

您需要的是编写一个采用JSON数据参数的自定义初始化程序。此实现使用SwiftyJSON。

像这样:

struct Trip {

  var status: Int?
  var name: Int?
  var id: Int?
  var petId: [Int]
  var timeStart: Int?

  init(status: Int?, name: Int?, id: Int?, petId: [Int], timeStart: Int?) {
    self.status = status
    self.name = name
    self.id = id
    self.petId = petId
    self.timeStart = timeStart
  }

  init?(_ json: JSON) {
    if let petId = json["petId"].number as? Int {
      self = Trip(status: json["status"].number as? Int, name: json["name"].number as? Int, id: json["id"] as? Int, petId: petId, timeStart: json["timeStart"] as? Int)
    } else {
      return nil
    }
  }
}