> Как реализовать проверку на переполнение при конвертации строки в число (iOS, Swift)
Уровень: senior · Роль: mobile · Категория: Технические вопросы
Компании: Meta
Стек: iOS, Swift
> Пример ответа
При конвертации строки в число в Swift нужно учитывать, что стандартный инициализатор Int(string) возвращает nil при невалидном формате, но не защищает от переполнения, если число выходит за пределы типа. Для надежной проверки используйте Int(truncatingIfNeeded:) или проверяйте границы через NSDecimalNumber.
Пример реализации:
SWIFTfunc safeConvertToInt(from string: String) -> Int? {guard let number = Int(string) else { return nil }// Проверка на переполнение: сравниваем с границами Intguard number <= Int.max && number >= Int.min else { return nil }return number}
Для больших чисел (например, превышающих Int64) используйте NSDecimalNumber:
SWIFTfunc safeConvertToInt64(from string: String) -> Int64? {let decimal = NSDecimalNumber(string: string)guard decimal != .notANumber else { return nil }// Проверка, что число в пределах Int64guard decimal.compare(NSDecimalNumber(value: Int64.max)) != .orderedDescending &&decimal.compare(NSDecimalNumber(value: Int64.min)) != .orderedAscending else {return nil}return decimal.int64Value}
В iOS 15+ можно использовать Int(_, format:) с локализацией, но переполнение все равно нужно проверять вручную. Рекомендуется также обрабатывать крайние случаи: пустые строки, пробелы, научную нотацию.
> Похожие задачи по mobile
Как реализовать фильтрацию массива с сохранением уникальных элементов и порядка
Как разделить функции для чтения и записи значений
Как проверить, что число положительное или отрицательное
Примеры случаев хранения значений на куче и как устроено выделение памяти для массивов
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью