Команда не выполнена из-за сигнала: Ошибка сегментации: 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"