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)
}
设置一个函数来抛出错误可能不是代码效率最高的方法,但对我来说它使代码清晰易读。
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)
}
设置一个函数来抛出错误可能不是代码效率最高的方法,但对我来说它使代码清晰易读。