国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Swift - Swift利用Decodable解析JSON的一個小問題詳解

Swift利用Decodable解析JSON的一個小問題詳解

2021-01-10 15:57AntScript Swift

這篇文章主要給大家介紹了關于Swift利用Decodable解析JSON的一個小問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

前言

Swift 4是蘋果計劃于2017年秋季推出的最新版本,其主要重點是提供與Swift 3代碼的源兼容性,并努力實現ABI穩定性。從Swift4開始提供的Decodable解析JSON確實很方便,但遇到一個小問題,記錄一下。

當JSON中某個key的值為{}或者空字符串”“,而該值需要解析的不是基本類型時,即使標記為 Optional,依然會導致整個解析失敗:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//: Playground
import Foundation
 
//Book.swift
struct Book: Codable {
 var id: Int
 var name: String
 var cover: BookCover?
 
 enum CodingKeys: String, CodingKey {
 case id
 case name
 case cover
 }
 
 struct BookCover: Codable {
 
 var url: String
 var thumbURL: String
 
 enum CodingKeys: String, CodingKey {
 case url
 case thumbURL = "thumb_url"
 }
 }
}
 
//JSON
let bookJSON1 =
"""
{
 "id": 1,
 "name": "fake name 1",
 "cover": {
 "url": "a.png",
 "thumb_url": "b.png"
 }
}
"""
 
let bookJSON2 =
"""
{
 "id": 2,
 "name": "fake name 2",
 "cover": {
 
 }
}
"""
 
//解析
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let book1 = try? decoder.decode(Book.self, from: bookJSON1.data(using: .utf8)!)
 
// 解析正常
print(book1)
let book2 = try? decoder.decode(Book.self, from: bookJSON2.data(using: .utf8)!)
// 輸出 nil,cover已經是 Optional,為何整個book都解析失敗?
print(book2)

原因:

因為cover是 Optional,所以會調用 decodeIfPresent 來解析,而在cover節點中沒有找到url,thumb_url這兩個key,導致默認解析失敗,直接拋出了錯誤。

解決:

重新實現 decodeIfPresent,在解析失敗時返回nil而不是拋出錯誤導致整個解析失敗:

?
1
2
3
4
5
extension KeyedDecodingContainer {
 public func decodeIfPresent<T>(_ type: T.Type, forKey key: K) throws -> T? where T : Decodable {
 return try? decode(type, forKey: key)
 }
}

參考: http://davelyon.net/2017/08/16/jsondecoder-in-the-real-world

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://antscript.com/post/2018-03-14-iOS-decodable-empty-json/

延伸 · 閱讀

精彩推薦
  • SwiftSwift中轉義閉包示例詳解

    Swift中轉義閉包示例詳解

    在Swift 中的閉包類似于結構塊,并可以在任何地方調用,下面這篇文章主要給大家介紹了關于Swift中轉義閉包的相關資料,需要的朋友可以參考下...

    小小小_小朋友11412021-12-26
  • SwiftSwift使用CollectionView實現廣告欄滑動效果

    Swift使用CollectionView實現廣告欄滑動效果

    這篇文章主要為大家詳細介紹了Swift使用CollectionView實現廣告欄滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Stevin的技術博客12372021-01-13
  • Swiftswift where與匹配模式的實例詳解

    swift where與匹配模式的實例詳解

    這篇文章主要介紹了swift where與匹配模式的實例詳解的相關資料,這里附有簡單的示例代碼,講的比較清楚,需要的朋友可以參考下...

    追到夢的魔術師14382021-01-06
  • SwiftSwift實現多個TableView側滑與切換效果

    Swift實現多個TableView側滑與切換效果

    這篇文章主要為大家詳細介紹了Swift實現多個TableView側滑與切換效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    乞力馬扎羅的雪雪5822021-01-08
  • SwiftSwift教程之基礎數據類型詳解

    Swift教程之基礎數據類型詳解

    這篇文章主要介紹了Swift教程之基礎數據類型詳解,本文詳細講解了Swift中的基本數據類型和基本語法,例如常量和變量、注釋、分號、整數、數值類型轉換等...

    Swift教程網5162020-12-18
  • SwiftSwift的74個常用內置函數介紹

    Swift的74個常用內置函數介紹

    這篇文章主要介紹了Swift的74個常用內置函數介紹,這篇文章列舉出了所有的Swift庫函數,內置函數是指無需引入任何模塊即可以直接使用的函數,需要的朋友可...

    Swift教程網5802020-12-19
  • SwiftSwift能代替Objective-C嗎?

    Swift能代替Objective-C嗎?

    這是我在網上上看到的答案,復制粘貼過來和大家分享一下,因為我和很多人一樣很關心Swift的出現對Mac開發的影響和對Objective-C的影響。...

    Swift教程網4412020-12-16
  • Swiftmac git xcrun error active developer path 錯誤

    mac git xcrun error active developer path 錯誤

    本文主要是講訴了如何解決在mac下使用git;xcode4.6的環境時,出現了錯誤(mac git xcrun error active developer path)的解決辦法,希望對大家有所幫助...

    Swift教程網2232020-12-16
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 综合久久亚洲 | 中文字幕在线观看一区二区 | 精品成人| 久久精品国产久精国产 | 国产精品成人久久久久 | 亚洲黄色高清 | 欧美日韩一区二区三区在线观看 | 99精品国产一区二区三区 | 亚洲国产成人av好男人在线观看 | 中文字幕日韩视频 | 亚洲精品成人 | 天天干天天躁 | 蜜桃精品一区二区 | 日韩免费视频一区二区 | 久久久久久久成人 | 亚洲性视频 | 美女视频黄色 | 日本中文字幕在线电影 | 亚洲精品影视 | 欧美电影在线观看 | 国产精品一二三区 | 亚洲成人久久久 | a国产在线 | 一级全黄少妇性色生活片免费 | 日韩精品一二三 | 亚洲电影在线 | 青娱乐自拍偷拍 | 在线a电影 | 天天综合久久 | 成人网视频在线观看 | 久久久www | 日韩电影在线 | 国产精品美女久久久久久久久久久 | 免费观看一区二区三区 | 国产乱码精品1区2区3区 | 国产成人久久精品一区二区三区 | 欧美激情一区二区 | av国产精品 | 国产精品日韩欧美 | 亚洲成av人片在线观看无 | 日本精品视频 |