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



以下代码func textfield(_ textfield:uitextfield,syredchangecharactersin范围:nsrange,替换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!)
 }

代码有什么问题,因为其在示例项目中正常工作。

您在不检查是否是零的情况下强制解开本地,如果您有非数字字符。

您要么需要一个默认值,要么更改返回失败时返回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"

最新更新