Leonardo
Leonardo

Reputation: 155

swift json null check

I'm poor at swift yet. (also English! Sorry!)

to check null in decoded json dictionary.

here is working code after search some tips. but I think this code is very bad.

any idea to make this gorgeous code ?

var v_desc = ""
var v_sword = ""
var v_sortk = 0
for (_, value) in api_result {
    if let ch_descr = value["description"] as? String {
        v_desc = ch_descr
    } else {
        v_desc = ""
    }
    if let ch_sword = value["search_word"] as? String {
        v_sword = ch_sword
    } else {
        v_sword = ""
    }
    if let ch_sortk = value["sort_key"] as? Int {
        v_sortk = ch_sortk
    } else {
        v_sortk = 0
    }

    self.cell_data.append(aps_tag(catg_UID: value["ctag_UID"] as! Int, set_code: value["set_code"] as! Int, title: value["title"] as! String, description: v_desc, search_word: v_sword, nums: value["nums"] as! Int, sort_key: v_sortk))

}

Upvotes: 0

Views: 107

Answers (1)

Code Different
Code Different

Reputation: 93191

Gorgeous is subjective but you can make it more concise with the nil-coalescing operator (??):

for (_, value) in api_result {
    let catg_UID = value["ctag_UID"] as! Int
    let set_code = value["set_code"] as! Int
    let title    = value["title"] as! String
    let nums     = value["nums"] as! Int

    let v_desc   = value["description"] as? String ?? ""
    let v_sword  = value["search_word"] as? String ?? ""
    let v_sortk  = value["sort_key"] as? Int ?? 0

    let aps_tag  = aps_tag(catg_UID: catg_UID, set_code: set_code, title: title, description: v_desc, search_word: v_sword, nums: nums, sort_key: v_sortk)
    self.cell_data.append(aps_tag)
}

Another thing: those snake_case variable and function names remind me a lot of C/C++. Doesn't look very Swifty to me but it's a personal preference.

Upvotes: 1

Related Questions