我的Swift开发

关于Swift中NSNull

2016-09-19  本文已影响674人  申申申申申

背景

今天进行项目的时候,原本正常运行的项目 莫名的crash
解决这个问题的步骤:

  1. 查看控制台抛出的错误
抛出异常

大概意思是不能把NSNull转换成NSString,此时猜想应该是返回数据出现异常,果断查看返回数据

  1. 检查返回数据

解析数据

guard let jsonDict = try? NSJSONSerialization.JSONObjectWithData(respdata!, options: .AllowFragments) else {
      activity.stopAnimating()
      cartview.headerEndRefreshing()
      dispatch_async(dispatch_get_main_queue()) {
      let alert = UIAlertView(title: "提示", message: "当前没有网络连接", delegate: self, cancelButtonTitle: "知道了呐~")
             alert.show()
      }
      return
 }

控制台输入: po print(jsonDict)

控制台输出

果然发现了一些奇怪的东西

  1. 解决问题
    查看问题代码:
    self.supplier = dic["supplier"] as! String
    显而易见这个变量需要保护,那么问题来了,怎么保护......

在Swift中,NSNull的官方说明为:

The NSNull class defines a singleton object used to represent null values in collection objects (which don’t allow nil values).
类NSNull 定义了一个单例对象,用于 一些不允许nil值 的对象 表示null值 

想了一些保护方法:

// 错误写法
self.supplier = dic["supplier"] as! String

if ((dic["goods_type"]?.isEqual(NSNull.init())) == false){
    self.goods_type = dic["goods_type"] as! String
}

if ((dic["supplier"]?.isEqual(NSNull.init())) == false) {
    self.supplier = dic["supplier"] as! String
}

if ((dic["supplier"]?.isEqual(NSNull())) == false) {
    self.supplier = dic["supplier"] as! String
}

if (!((dic["supplier"]?.isEqual(NSNull()))!)) {
    self.supplier = dic["supplier"] as! String
}

if !(dic["supplier"] is NSNull) {
    self.supplier = dic["supplier"] as! String
}


近段时间接手了一个Swift项目,正好依据项目来对Swift进行一些列的学习与总结

不合适的地方还请指点~ 感激不尽

2016.09.19 晚

上一篇下一篇

猜你喜欢

热点阅读