Приведение данных типа Any к массиву строк в Swift - PullRequest
0 голосов
/ 09 января 2020

Так что при работе над приложением, использующим swift и firebase, но у меня есть проблема, у меня есть табличное представление, в котором я добавляю данные в виде дат, но когда я их получаю, я хочу, чтобы они были упорядочены таким образом, когда я добавлю их в. так что последний элемент будет в последнем индексе. В основном я извлекаю блок данных как тип any

Optional({
    "-Ly6Njj9vNH_T9umxDwS" = "01-08-2020";
    "-Ly6U4vzEAGvIC0Yblnl" = "12-08-2020";
    "-Ly6U7_91jW5tajpX7k0" = "11-08-2020";
    "-Ly6UG6HYqTMq1NaRehI" = "10-08-2020";
})

, поэтому здесь вы можете видеть, что они пронумерованы с точностью до низа, но когда я пытаюсь поместить их в массив, используя

data as? [String]

это не работает, и я могу сделать

data as [String: String]

, но это не сохраняет порядок, я знаю, что я могу добавить метки времени и тому подобное, но если у меня есть данные, правильно отформатированные aleady, но в типе Any, там должен быть способ преобразовать его в массив

1 Ответ

0 голосов
/ 09 января 2020

В словаре нет реального порядка; порядок распечатки не имеет смысла и может измениться. Мы можем воспроизвести это без ссылки на firebase:

let d : NSDictionary = [
    "-Ly6Njj9vNH_T9umxDwS" : "01-08-2020",
    "-Ly6U4vzEAGvIC0Yblnl" : "12-08-2020",
    "-Ly6U7_91jW5tajpX7k0" : "11-08-2020",
    "-Ly6UG6HYqTMq1NaRehI" : "10-08-2020"
]
print(d)
//{
//    "-Ly6Njj9vNH_T9umxDwS" = "01-08-2020";
//    "-Ly6U4vzEAGvIC0Yblnl" = "12-08-2020";
//    "-Ly6U7_91jW5tajpX7k0" = "11-08-2020";
//    "-Ly6UG6HYqTMq1NaRehI" = "10-08-2020";
//}

let d2 = d as! [String:String]
print(d2)
// ["-Ly6Njj9vNH_T9umxDwS": "01-08-2020", 
   "-Ly6U4vzEAGvIC0Yblnl": "12-08-2020", 
   "-Ly6UG6HYqTMq1NaRehI": "10-08-2020", 
   "-Ly6U7_91jW5tajpX7k0": "11-08-2020"]

Итак, если вы хотите упорядоченный список пар, вы должны использовать массив, а вы должны заказать его самостоятельно каким-то образом, предположительно используя метку времени. Но, как говорится в комментарии, этот порядок равен порядку ключей.

let arr = Array(d2).sorted {$0.key < $1.key}
print(arr)
//[(key: "-Ly6Njj9vNH_T9umxDwS", value: "01-08-2020"),
// (key: "-Ly6U4vzEAGvIC0Yblnl", value: "12-08-2020"),
// (key: "-Ly6U7_91jW5tajpX7k0", value: "11-08-2020"),
// (key: "-Ly6UG6HYqTMq1NaRehI", value: "10-08-2020")]

Если все, что вам нужно, это строки даты, просто map, вплоть до value s. Порядок сохраняется, потому что теперь это массивы.

let arr2 = arr.map {$0.value}
print(arr2)
// ["01-08-2020", "12-08-2020", "11-08-2020", "10-08-2020"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...