Команда не выполнена из-за сигнала: Ошибка сегментации: 11 причина

Следующий код в func textField(_ textField: UITextField, mustChangeCharactersIn range: NSRange, replaceString string: String), вызывающий эту ошибку: Команда не выполнена из-за сигнала: Ошибка сегментации: 11 причина

var finalStr = (textField.text! as NSString).replacingCharacters(in: range, with: string) 
if textfield == mobile && finalStr.hasPrefix("0"){ 
textField.text = finalStr.nonZeroNumber 
return false }

var nonZeroNumber:String{
             let local = Double(self)
            return String(format: "%.0f",local!)
 }

что не так с кодом, так как он работает нормально в примере проекта.

1 ответ

Решение

Вы принудительно распаковываете локально, не проверяя, равен ли он нулю, что может быть, если у вас есть нечисловые символы.

Вам нужно либо значение по умолчанию, либо изменить метод, чтобы он возвращал nil при ошибке и проверял nil в другом месте.

var nonZeroNumber:String{
    let local = Double(self) ?? 0       // use 0 if Double(self) was nil
    return String(format: "%.0f",local) // local, not local!
}

или же

var nonZeroNumber: String? {    // note Optional
    guard let local = Double(self) else {
        return nil
    }
    return String(format: "%.0f, local) 
}

... 
textField.text = finalStr.nonZeroNumber ?? "default value"
Другие вопросы по тегам