2017-01-16 9 views
0

Web APIのレスポンスを取得します。このAPIは配列内の各JSONオブジェクトのCustomerクラスをループして初期化します。 Customerクラスには、いくつかのオプションのプロパティを持つ基本クラスがあります。 JSONにnull値があるとエラーが発生し、正しく処理する方法がわかりません。私は特に、空の日付を迅速に処理する方法が不明です。誰かが私に助言を与えることができれば、本当に感謝しています!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 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 
    } 
} 

ワン:いくつかのオプションのプロパティが含まれてい

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クラス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 
    } 
} 
関連する問題