JSON return 没有检查?

JSON return nil check?

struct AltWX: Decodable {
var raw: String
}

typealias AltMetarDecode = [String: AltWX]



do 
{ 
    let aero = try decoder.decode(AltMetarDecode.self, from: data) 
    DispatchQueue.main.async {
        if self.DownloadOrderCode == 3 
        {
            if let Ab = aero[ICAO1]
            {
                self.Alternate1Metar.text = Ab.raw
                UserDefaults.standard.set(Ab.raw, forKey: "MetarCodeAlt1")
            }
        }
        ...

上面的代码像这样访问一个Json:

"xxxx": { "raw": "Test" 

所以 Ab.raw 会打印 Test

我如何添加错误检查以查看 ICAO1 是否存在以及 Ab.raw 是否存在,以及是否有任何值为 nil return?我阅读了对 Json 的通常捕获响应,但不确定如何针对这种情况特别格式化它,特别是我有很多订单代码,每个订单代码都必须单独检查。

这会检查 ICAO1 是否存在并且 raw 是否为空

if let raw = aero["ICAO1"]?.raw, raw.isEmpty {

}

请按照命名约定小写命名变量。

我想你想要一个 do try catch 块。


enum ContentError: Error {
    case missingICAO1
    case missingRaw
    case orderCodeError
}

// not sure of the return types from the decode block ???
func setValues(values: AltMetarDecode) throws {
   guard self.DownloadOrderCode == 3 else { throw ContentError.orderCodeError }
   guard let Ab = values[ICA01] else { throw ContentError.missingICA01 }
   guard Ab.raw != nil else { throw ContentError.missingRaw }

   self.Alternate1Metar.test = Ab.raw
   UserDefaults.standard.set(Ab.raw, forKey: "MetarCodeAlt1")
}

do {
   let aero = try decoder.decode(AltMetaDecode.self, from data)
   try DispatchQueue.main.async {
      setValues(values: aero)
   }
} catch {
   print(error)
}

设置一个函数来抛出错误可能不是代码效率最高的方法,但对我来说它使代码清晰易读。