关于Swift中NSNull

作者: 申申申申申 | 来源:发表于2016-09-19 20:43 被阅读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 晚

    相关文章

      网友评论

      本文标题:关于Swift中NSNull

      本文链接:https://www.haomeiwen.com/subject/czjnettx.html