> Как реализовать проверку на переполнение при конвертации строки в число (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Meta

Стек: iOS, Swift

> Пример ответа

При конвертации строки в число в Swift нужно учитывать, что стандартный инициализатор Int(string) возвращает nil при невалидном формате, но не защищает от переполнения, если число выходит за пределы типа. Для надежной проверки используйте Int(truncatingIfNeeded:) или проверяйте границы через NSDecimalNumber.

Пример реализации:

SWIFT
func safeConvertToInt(from string: String) -> Int? {
guard let number = Int(string) else { return nil }
// Проверка на переполнение: сравниваем с границами Int
guard number <= Int.max && number >= Int.min else { return nil }
return number
}

Для больших чисел (например, превышающих Int64) используйте NSDecimalNumber:

SWIFT
func safeConvertToInt64(from string: String) -> Int64? {
let decimal = NSDecimalNumber(string: string)
guard decimal != .notANumber else { return nil }
// Проверка, что число в пределах Int64
guard decimal.compare(NSDecimalNumber(value: Int64.max)) != .orderedDescending &&
decimal.compare(NSDecimalNumber(value: Int64.min)) != .orderedAscending else {
return nil
}
return decimal.int64Value
}

В iOS 15+ можно использовать Int(_, format:) с локализацией, но переполнение все равно нужно проверять вручную. Рекомендуется также обрабатывать крайние случаи: пустые строки, пробелы, научную нотацию.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью