В 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)
}
}