Замените значения NSNull в массиве словаря пустой строкой - PullRequest
1 голос
/ 06 октября 2019

У меня есть массив с такой структурой,

[
        {
            "Id": 20,
            "Name": "Name String",
            "Email": null 
       },
]

Я хочу заменить пустое вхождение на пустую строку. Я попробовал метод карты, как показано ниже, но не повезло.

let tempResult = recordsList.map{ $0 is NSNull ? "" : $0 }

1 Ответ

1 голос
/ 06 октября 2019

Ваша структура представляет собой массив словарей. При отображении каждый элемент будет словарем. Используйте этот словарь для создания нового словаря, в котором NSNull s были заменены пустыми строками:

let recordsList: [[String : Any]] = [
        [
            "Id": 20,
            "Name": "Name String",
            "Email": NSNull()
       ]
]


let result: [[String : Any]] = recordsList.map { dict in
    var newdict = [String : Any]()
    for (k, v) in dict {
        newdict[k] = v is NSNull ? "" : v
    }
    return newdict
}

print(result)
[["Email": "", "Id": 20, "Name": "Name String"]]

Это также можно сделать с помощью Dictionary(uniqueKeysWithValues:) и путем сопоставления словаря, чтобы изменить пустые строки на пустые:

let result: [[String : Any]] = recordsList.map { dict in
    Dictionary(uniqueKeysWithValues: dict.map { (k, v) in (k, v is NSNull ? "" : v) })
}

Ваш вопрос помечен NSDictionary. Это может быть приспособлено с несколькими изменениями:

let result: [NSDictionary] = recordsList.map { dict in
    Dictionary(uniqueKeysWithValues: (dict as! [AnyHashable : Any]).map { (k, v) in (k, v is NSNull ? "" : v) }) as NSDictionary
}
...