在swift中parsingJson时,无法将types'NSNull'的值转换为'NSString'

我有以下class级

class BannerResponse : NSObject{ let URL = "Url"; let CONTACT_NO = "ContactNo"; let IMAGE = "Image"; let BIG_IMAGE = "BigImage"; let ID = "Id"; let TITLE = "Title"; let NO_VIEW = "NoView"; let START_DATE = "StartDate"; let END_DATE = "EndDate"; var url:String; var contactNo:String; var image:String; var bigImage:String; var title:String; var id:Int; var noView:Int; var startDate:String; var endDate:String; init(data : NSDictionary){ url = data[URL] as! String; contactNo = data[CONTACT_NO] as! String; image = data[IMAGE] as! String; bigImage = data[BIG_IMAGE] as! String; title = data[TITLE] as! String; id = data[ID] as! Int; noView = data[NO_VIEW] as! Int; startDate = data[START_DATE] as! String; endDate = data[END_DATE] as! String; } } 

当我运行代码时,出现以下错误

 Could not cast value of type 'NSNull' (0x10a85f378) to 'NSString' (0x109eccb20). 

编辑

 do { if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary{ onSuccess(BannerResponse(data: json)) } } catch { onFail() } 

你的一个data[SOME_KEY]data[SOME_KEY]types而不是String ,因为你使用! 该应用程序崩溃。

你可以做两件事之一:

  1. 将BannerResponse类中的variables更改为可选。 并用? 而不是!init方法中设置值时。 喜欢这个:

`

 var title: String? init(data: NSDictionary) { self.title = data[TITLE] as? String } 

要么

  1. 使用? 而不是!init方法中设置值时,只要dict[SOME_KEY]为零或不是预期的types就设置一个默认值。 这看起来像这样:

`

 if let title = data[TITLE] as? String { self.title = title } else { self.title = "default title" } // Shorthand would be: // self.title = data[TITLE] as? String ?? "default title" 

我想第三件事是确保服务器从不发送空值。 但这是不切实际的,因为从来没有这样的事情。 您应该编写客户端代码,以假定JSON中的每个值都可以为null或意外types。

您的某些键值为空值。 他们通过NSJSONSerialization映射到NSNull。

你需要做几件事情

将所有variables( urlcontactNo等)更改为optionals:

 var url:String? var contactNo:String? 

更改所有的作业使用? 而不是!

 url = noNulls[URL] as? String contactNo = noNulls[CONTACT_NO] as? String 

最后,让你的代码处理所有variables的nil值。 (但是不要使用!那个path导致崩溃。)