2017-01-16 4 views
0

Я получаю ответ API веб-интерфейса, который я просматриваю и инициализирую класс Customer для каждого объекта JSON в массиве. Класс Customer имеет базовый класс с несколькими дополнительными свойствами. Я получаю ошибки, когда в JSON есть нулевые значения, и я не уверен, как правильно их обрабатывать. Я особенно не уверен, как обрабатывать нулевую дату в swift. Если бы кто-нибудь мог дать мне несколько советов, я был бы очень признателен!Как инициализировать класс с дополнительными свойствами в Swift 3

JSON вернулся из Web API:

[{"Id":1,"BusinessId":1,"CompanyName":"Test Company4","FirstName":"Mike","LastName":"Doe","CustomerType":1,"CustomerStatus":1,"IsDeleted":false,"Created":"2016-12-22T20:12:10.2760144Z","CreatedBy":1,"Modified":"2016-12-29T19:29:26.1245219Z","ModifiedBy":1},{"Id":2,"BusinessId":1,"CompanyName":"Test Company5","FirstName":"Mike","LastName":"Doe","CustomerType":1,"CustomerStatus":1,"IsDeleted":false,"Created":"2017-01-03T20:18:51.7639708Z","CreatedBy":1,"Modified":null,"ModifiedBy":null}] 

класс Customer:

class Customer : BaseEntity { 

    var Id: Int64 
    var BusinessId: Int64 
    var CustomerType: Int64 
    var CustomerStatus: Int64 
    var CompanyName: String 
    var FirstName: String 
    var LastName: String 

    init?(json: [String: Any]) { 

     let formatter = DateFormatter() 
     formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 

     guard let id = json["Id"] as? Int64, 
      let businessId = json["BusinessId"] as? Int64, 
      let customerType = json["CustomerType"] as? Int64, 
      let customerStatus = json["CustomerStatus"] as? Int64, 
      let companyName = json["CompanyName"] as? String, 
      let firstName = json["FirstName"] as? String, 
      let lastName = json["LastName"] as? String, 
      let isDeleted = json["IsDeleted"] as? Bool 
      else { 
       return nil 
     } 

     var created = Date() 
     if let cdate = json["Created"] as? String { 
      created = formatter.date(from: cdate)! 
     } 
     let createdBy = json["CreatedBy"] as? String 

     var modified = Date() 
     if let mdate = json["Modified"] as? String { 
      modified = formatter.date(from: mdate)! 
     } 
     let modifiedBy = json["ModifiedBy"] as? String 

     self.Id = id 
     self.BusinessId = businessId 
     self.CustomerType = customerType 
     self.CustomerStatus = customerStatus 
     self.CompanyName = companyName 
     self.FirstName = firstName 
     self.LastName = lastName 
     super.init(isDeleted: isDeleted, created: created, createdBy: createdBy, modified: modified, modifiedBy: modifiedBy) 
    } 
} 

BaseEntity класс, который содержит некоторые дополнительные свойства:

class BaseEntity { 

    var IsDeleted: Bool 
    var Created: Date 
    var CreatedBy: String 
    var Modified: Date? 
    var ModifiedBy: String? 

    init(isDeleted: Bool, created: Date, createdBy: String, modified: Date, modifiedBy: String) { 
     self.IsDeleted = isDeleted 
     self.Created = created 
     self.CreatedBy = createdBy 
     self.Modified = modified 
     self.ModifiedBy = modifiedBy 
    } 
} 

Одна из проблем, я бегу в когда я инициализирую Customer, мой объект Customer выглядит так. Затем, когда я пытаюсь вставить его в базу данных, он не признает свойства BaseEntity как свойства Заказчик:

Id = 1 
BusinessId = 1 
CustomerType = 1 
CustomerStatus = 1 
CompanyName = "Test Company4" 
FirstName = "Mike" 
LastName = "Doe" 
BaseEntity 
    IsDeleted = true 
    Created = '1/1/2017' 
    CreatedBy = 1 
    Modified = '1/1/2017' 
    ModifiedBy = 1 

ответ

0

Вы должны определить тип класса для модели

class BaseEntity { 

в

class BaseEntity: NSObject { 

Это путь вы можете создать свой класс модели: -

//Model Class 
class BaseModel: NSObject { 
    var name: String 
    var address: String 
    var mobilenumber: Int 

    init(name: String?, address: String?, mobilenumber: Int?) { 
     self.name = name ?? "" 
     self.address = address ?? "" 
     self.mobilenumber = mobilenumber ?? 0 
    } 
} 

//Pass value inside model class 
class ViewController: UIViewController { 

    var model = [BaseModel]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     //Pass value inside Model 
     model.append(BaseModel(name: "Your name", address: "Your address", mobilenumber: 5545545452)) 

    } 
} 

//Get value from Model class 
class DetailsController: UIViewController { 
    var details: BaseModel? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     //Retrive value from model 
     let name = details?.name ?? "" 
     let address = details?.address ?? "" 
     let mobile = details?.mobilenumber ?? 0 
    } 
}