Как обрабатывать JSON является пустым или пустым с созданием расширения строки Swift? - PullRequest
0 голосов
/ 01 июня 2018

Как проверить, является ли объект Json пустым или нулевым в ios swift.в моем ответе json содержит 100 строковых объектов, как просто проверить, чтобы каждая строка была пустой или нулевой.

это мой код для пустой строки,

var districtCvar = permanentCAddVarDictionary?["district"] as! String
if districtCvar.isEmpty {
     districtCvar = "---"
}
self.permanentCAddDic.setValue(districtCvar, forKey: "district")

это мойкод для нуля,

var eresidencevar = permanentCAddVarDictionary?["e_residence"]
if eresidencevar is NSNull {
    eresidencevar = "----"
}
self.emergencyContactDic.setValue(eresidencevar, forKey: "e_residence")..

см. мои данные JSON.

"hostel_info" : {
    "e_residence" : "",
    "district" : null,
    "bed_name" : "",
    "month" : null,
    "institution_name" : null,
    "board" : null,
    "reg_no" : null
  },

Ответы [ 2 ]

0 голосов
/ 01 июня 2018
extension Dictionary {

    func valueIsNullForKey(_ key:Key) -> Bool{
        if  (self[key] as? String) != nil {
            return true
        }
       return false
    }

    func allKeysWithValue()->[Key]{
      return  self.keys.filter { valueIsNullForKey($0)}
    }
    func allKeysWithOutValue()->[Key]{
        return  self.keys.filter { !valueIsNullForKey($0)}

    }

    mutating func updateNullValueWithValue(_ value:Value){
        self.allKeysWithOutValue().forEach { (key) in
            self[key] = value
        }
    }

}

используется как:

Примечание updateNullValueWithValue мутирует

      var data = ["item":nil ,"item1":"","item3":nil ]

        print(data.allKeysWithOutValue()) // ptint ["item3","item"]

        print(data.allKeysWithValue()) // ptint ["item1"]

        print(data.valueIsNullForKey("item")) // print false

        print(data.valueIsNullForKey("item1"))  // print true

        data.updateNullValueWithValue("----")
        print(data) 
// print ["item3": Optional("----"), "item": Optional("----"), "item1":Optional("")]
0 голосов
/ 01 июня 2018

Вы можете использовать if let, чтобы проверить, есть ли у вас значение для района, а затем проверить, если оно пустое.

В вашем случае это будет:

let districtCvar: String
if let value = permanentCAddVarDictionary?["district"] as? String, !value.isEmpty {
    districtCvar = value
} else {
    districtCvar = "---"
}
self.permanentCAddDic.setValue(districtCvar, forKey: "district")

Не самое красивое решение, но может работать для вас.

extension Dictionary {
    func stringUnwrappedWithDefault(key: Key, defaultValue: String = "---") -> String {
        if let value = self[key] as? String, !value.isEmpty {
            return value
        } else {
            return defaultValue
        }
    }
}

Использование:

permanentCAddVarDictionary?.stringUnwrappedWithDefault(key: "foo")

Или:

extension Dictionary {
    func fullUnwrappedString(key: Key) -> String? {
        if let value = self[key] as? String, !value.isEmpty {
            return value
        } else {
            return nil
        }
    }
}

permanentCAddVarDictionary?.fullUnwrappedString(key: "foo") ?? "---"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...