Из вашего комментария
Я пытаюсь проверить коды состояния, возвращаемые из ответа HTTP
Я предполагаю, что в некоторых последующих частях вашего кода вы собираемся сделать что-то вроде:
if range.contains(statusCode) {
// blah blah blah
}
, если это все, что вам нужно (т.е. не использовать диапазон для индексации массива), вы можете попытаться создать стертый AnyRange
тип, подобный этому:
struct AnyRange {
let contains: (Int) -> Bool
init<T: RangeExpression>(_ range: T) where T.Bound == Int {
contains = range.contains
}
}
Когда вы вводите значения в свой словарь, сделайте что-то вроде этого:
let options: [String: Any] = ["Range": AnyRange(200..<300)]
И затем вы можете привести каждый диапазон к AnyRange
:
if let range = options["Range"] as? AnyRange {
if range.contains(statusCode) {
// blah blah blah
}
}
Судя по всему, вы, кажется, храните вещи разных типов в одном словаре. Это хорошая возможность для создания структуры:
struct Options {
let range: AnyRange
// put other stuff you want to store here...
}
Таким образом, вам не нужно приведение. Все строго набрано.