如何删除文本字段中的第一个字符并更新内容?

时间:2018-03-07 17:42:12

标签: ios swift

我有一个带有默认小数点的文本字段。我创建了一个按钮,所以当按下按钮时,它会获取文本字段中的当前数字并使其变为减号。例如。如果5在文本字段中并按下按钮,则-5现在将在文本字段中。我有这个部分工作,但相反的方法不起作用。因此,如果用户再次按下该按钮,则现在应将减号转换为正数。例如。 -5现在应该是5。

if(!(currentSelectedTF.text?.contains("-"))!){
        var selectedtext = "-" + currentSelectedTF.text!;
        currentSelectedTF.text = selectedtext;
    }else{
        var selectedtext = currentSelectedTF.text!.suffix(from: (currentSelectedTF.text?.startIndex)!);
        currentSelectedTF.text = selectedtext;
    }  

这是单击按钮时尝试实现的逻辑。但我收到以下错误:

Cannot assign value of type 'String.SubSequence' (aka 'Substring') to type 'String?'

任何人都知道为什么?我正在使用swift 4

2 个答案:

答案 0 :(得分:1)

Swift中的许多子字符串操作返回一个名为String.SubSequence的新类型,但遗憾的是,您无法将其分配给varString类型的String?。您可以将String.SubSequence转换回String,然后将其传递给String构造函数。

你的专栏:

var selectedtext = currentSelectedTF.text!.suffix(from: (currentSelectedTF.text?.startIndex)!)

无效,因为您从第一个字符而不是第二个字符开始suffix。您可以通过抵消索引来修复它,但dropFirst()可以更轻松地执行您想要的操作。

以下是您的代码版本,该代码使用hasPrefix("-")查找"-"并使用dropFirst()删除"-"

if let text = currentSelectedTF.text {
    if text.hasPrefix("-") {
        // dropFirst() returns a String.SubSequence,
        // so use String() to convert it back
        currentSelectedTF.text = String(text.dropFirst())
    } else {
        currentSelectedTF.text = "-" + text
    }
}

答案 1 :(得分:0)

以下是编写else语句的方法。

else {
  guard let selectedtext = currentSelectedTF.text,
    let number = Int(selectedtext)
    else { return }
  let newNumber = number * -1
  currentSelectedTF.text = "\(newNumber)"
}

PS:还要考虑评论:使用hasPrefix代替contains。此外,我可能会转换为数字,并检查它是否小于零。但总的来说,在这种情况下,我认为并不重要。