В Swift конвертировать [String: Any!] В URLComponents

У меня есть словарь [String: Any!], Который имеет значения, такие как целые числа, числа с плавающей запятой и строки. Когда я создаю URLComponents, используя приведенный ниже код, он не принимает значения, связанные с целыми числами и числами с плавающей точкой.

 func queryItems(dictionary: [String: Any]) -> [URLQueryItem] {
    return dictionary.map {
        URLQueryItem(name: $0, value: $1 as? String)
    }
}

2 ответа

Я думаю, что вы должны рассмотреть возможность использования [String:String] вместо [String:Any] и преобразовать ваши значения в String за один шаг до отправки его в функцию queryItems. Но если вы хотите оставить это так, чем приведение из значения Int,Float, Двойной как? Строка всегда терпит неудачу. Вы можете использовать String().

ОчевидноAnyможет быть что угодно. Но если у вас есть некоторый контроль над своими входными данными, один простой вариант — это приведение кLosslessStringConvertible.String,Substringи все ваши основные числовые типы соответствуют ему.

Предупреждения:

  • Boolвозвращаетсяtrueилиfalse.
  • NSObjectне соответствует этому, поэтому, если вы смешиваетеNSNumberилиNSStringвам также необходимо учитывать их.
      func queryItems(dictionary: [String: Any]) -> [URLQueryItem] {
    dictionary.map {
        URLQueryItem(name: $0, value: ($1 as? LosslessStringConvertible)?.description)
    }
}
Другие вопросы по тегам