我有一个带有默认小数点的文本字段。我创建了一个按钮,所以当按下按钮时,它会获取文本字段中的当前数字并使其变为减号。例如。如果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
答案 0 :(得分:1)
Swift中的许多子字符串操作返回一个名为String.SubSequence
的新类型,但遗憾的是,您无法将其分配给var
或String
类型的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
。此外,我可能会转换为数字,并检查它是否小于零。但总的来说,在这种情况下,我认为并不重要。