我在網上看到了一段代碼,它使用 Swift Codable 將 JSON 解碼為結構。
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
if let stringValue = try? container.decode(String.self, forKey: .someId), let value = Int64(stringValue) {
someId = value
} else {
someId = try container.decode(Int64.self, forKey: .someId)
}
}
這段代碼:
- 解碼一個字串
- 試圖將其決議為
Int64
- 如果失敗 - 它直接嘗試解碼
Int64
我的問題是 - 這段代碼是多余的嗎?
Int64.init(_:)
有沒有什么場景String
可以解碼一些JSONDecoder.decode
不能解碼的東西?
實際上,這個“decode String - init Int64”不是和引擎蓋下的完全一樣JSONDecoder
嗎?
uj5u.com熱心網友回復:
這不是多余的。它可用于處理有時將數字編碼為字串(在引號內),有時只是作為數字編碼的 JSON。
例如,JSON 有時可能是:
{
"someId": "12345"
}
在這種情況下,您需要解碼為String
, 然后Int64.init
有時 JSON 可能是:
{
"someId": 12345
}
在這種情況下,解碼到String
會失敗,你會直接解碼到Int64
.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/507554.html