在swift 2中解析json对象

我是iOS和Swift编程的新手,我正在尝试创建一个解析json对象的方法

我的json如下

{ status : true; data :[ "url" : "", "startDate" : "", "endDate" : "", ... ] } 

我在swift中的代码就是这样

import基金会

 class SplashResponse { let STATUS = "status"; let DATA = "data"; let URL = "Url" let CONTACT_NO = "ContactNo"; let SPLASH_IMAGE = "SplashImage"; let SPLASH_ID = "SplashId"; let TITLE = "Title"; let NO_VIEW = "NoView"; let IS_ACTIVE = "isActive"; let START_DATE = "StartDate"; let END_DATE = "EndDate"; var status : Bool var url : String var contactNo : String var splashImage : String var splashId : Int var title : String var numOfViews : Int var isActive : Bool var startDate : String var endDate : String init(data : NSDictionary){ status = data[STATUS] as! Bool; if (status == true) { if let item = data[DATA] as? [String: AnyObject] { url = item[URL] as! String; contactNo = item[CONTACT_NO] as! String; splashImage = item[SPLASH_IMAGE] as! String; splashId = item[SPLASH_ID] as! Int; title = item[TITLE] as! String; numOfViews = item[NO_VIEW] as! Int; isActive = item[IS_ACTIVE] as! Bool; startDate = item[START_DATE] as! String; endDate = item[END_DATE] as! String; } } else { url = ""; contactNo = ""; splashImage = ""; splashId = -1; title = ""; numOfViews = -1; isActive = false; startDate = ""; endDate = ""; } } } 

我收到了以下错误

 Return from initializer without initializing all stored properties 

您的问题是,如果if let item = ...条件失败,编译器不知道如何初始化您的值。

您可以为status条件选择两个选项,但在true分支中创建一个没有其他分支的新条件,因此编译器会正确地抱怨未初始化的存储属性。

我的建议是首先安全地解包data[DATA]而不制作新的范围,然后使用这些值。

错误信息足够清楚,

从初始化程序返回而不初始化所有存储的属性

显然你的所有属性都是存储属性。

因此,您必须确保一旦初始化程序返回, 每个存储的属性都将具有它的值 。 它可以是零或一些值。

在你的情况下,首先,

 status = data[STATUS] as! Bool; 

可能会失败,因此所有其余的都不会被执行。

即使status == true可能会成功,但此条件带来的所有代码都可能失败。 这违反了我刚才提到的规则。