由于信号命令失败:分段故障:11原因

时间:2018-04-04 13:34:06

标签: swift segmentation-fault uitextfield uitextfielddelegate

以下代码 func textField(_ textField:UITextField,shouldChangeCharactersIn范围: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!)
 }

代码有什么问题,因为它在示例项目中运行良好。

1 个答案:

答案 0 :(得分:0)

你强行展开本地而不检查它是否为零,如果你有非数字字符可能会这样。

您需要一个默认值,或者更改方法以在失败时返回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"