iOS(Swift)學習筆記之SwiftyJSON的使用

本文爲原創文章,轉載請標明出處html

1. 經過CocoaPods安裝SwiftyJSON

platform :ios, '10.0'

target '<Your Target Name>' do

  use_frameworks!

  pod 'SwiftyJSON', '~> 4.0.0'

end

2. 初始化

import SwiftyJSON

let json = JSON(data: dataFromNetworking)
let json = JSON(jsonObject)
if let dataFromString = jsonString.data(using: .utf8, allowLossyConversion: false) {
    let json = JSON(data: dataFromString)
}

3. 下標訪問

// 方式1
let name = json[1]["list"][2]["name"].string

//方式2
let name = json[1,"list",2,"name"].string

//方式3
let keys:[JSONSubscriptType] = [1,"list",2,"name"]
let name = json[keys].string
let arrayNames =  json["users"].arrayValue.map({$0["name"].stringValue})

4. 循環遍歷

無論JSON是數組類型仍是字典類型key的類型都爲Stringios

for (key,subJSON) in json {
    ...
}

5. 錯誤處理

枚舉類型SwiftyJSONError包含unsupportedTypeindexOutOfBoundselementTooDeepwrongTypenotExistinvalidJSONerrorDomainjson

6. 可選值獲取

經過.number.string.bool.int等方法獲取到的是可選值。swift

if let id = json["user"]["name"].string {
    ...
} else {
    ...
    print(json["user"]["name"].error!)
}

7. 非可選值獲取

經過.xxxValue方法獲取到的是非可選值。數組

// 若不是String或爲nil,返回「」
let name: String = json["name"].stringValue

8. 設置值

json["name"] = JSON("new-name")
json[0] = JSON(1)
json["name"].string =  "Jack"
json.arrayObject = [1,2,3,4]
json.dictionaryObject = ["name":"Jack", "age":25]

9. 原始數據

let rawObject: Any = json.object
let rawValue: Any = json.rawValue
do {
    let rawData = try json.rawData()
} catch {
    print("Error \(error)")
}
if let rawString = json.rawString() {
    ...
} else {
    print("json.rawString is nil")
}

10. 其餘方法

exists

// 判斷是否存在
if json["name"].exists()

merge

let original: JSON = [
    "first_name": "Theo",
    "age": 20,
    "skills": ["Coding", "Reading"],
    "address": [
        "street": "Software St",
        "zip": "210046",
    ]
]

let update: JSON = [
    "last_name": "Tsao",
    "age": 22,
    "skills": ["Writing"],
    "address": [
        "zip": "210012",
        "city": "Nanjing"
    ]
]

let updated = original.merge(with: update)

輸出:code

[
    "first_name": "Theo",
    "last_name": "Tsao",
    "age": 22,
    "skills": ["Coding", "Reading", "Writing"],
    "address": [
        "street": "Software St",
        "zip": "210012",
        "city": "Nanjing"
    ]
]
相關文章
相關標籤/搜索