命令因信号而失败:分段错误:11 原因
Command failed due to signal: Segmentation fault: 11 cause
以下代码在
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString 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!)
}
代码有什么问题,因为它在示例项目中运行良好。
你在不检查它是否为零的情况下强行解包本地,如果你有 non-numeric 个字符,则可能是零。
您要么需要一个默认值,要么在失败时将方法更改为 return 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"
以下代码在 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString 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!)
}
代码有什么问题,因为它在示例项目中运行良好。
你在不检查它是否为零的情况下强行解包本地,如果你有 non-numeric 个字符,则可能是零。
您要么需要一个默认值,要么在失败时将方法更改为 return 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"