swift 中if let 与 guard let的技巧

swift的中optional 变量的判断和解析虽然带来了便利, 但是同样也带了了不少麻烦的地方, 假设有个json文件是夏眠这样的

{
  "product": {
    "subclass": {
      "subclass2": {
        "subclass3": {
          "key": value,
        }
      }
    }
  }
}

当解析的时可能由于技巧不足,就可能写成下面这个样子

if let jsonDic = json as? NSDictionary {
  if let product = jsonDic["product"] as? String {
    if let subclass = product["subclass"] as? ... {
      if let .... {
        ...
        if let key = ... {
          print("value:\(key)")
        }
      }
    }  
  }
}

其实和很多其它语言一样, 解析规则是满足前后顺序的,就像`c语言中if` if(a && a->isbool && a->f()) 一样当a == NULL 时,后面的条件就不会去访问;所以在swift中我们可以写成下面这两种情况来使代码看起来更优雅一点;👀下面;

if let jsonDic = json as? NSDictionary,
       product = jsonDic["product"] as? ...,
       subclass= product["subclass"] as? ...,
       subclass1= subclass["subclass1"] as? ...,
       subclass2= subclass1["suclass2"] as? ...,
       key = subclass2["key"] as? Int {
  print("value:/(key)");
}

// 或者下面这样更优雅的处理
if let value = JSON(json)["product"]["subclass"]["subclass1"]["subclass2"]["subclass3"]["key"] {
  print("value:/(value)");
}

results matching ""

    No results matching ""