在Swift 3中删除最后一个字符

8

我正在创建一个简单的计算器应用程序,目前在点击按钮时删除最后一个字符方面遇到了困难。我正在使用dropLast()方法,但是我一直收到错误提示:

调用中缺少参数#1

@IBAction func onDelPressed (button: UIButton!)  {
     runningNumber = runningNumber.characters.dropLast()
     currentLbl.text = runningNumber
}
2个回答

24

Swift 4 补充

在 Swift 中,你可以直接在 String 实例上应用 dropLast(),而不再需要调用 .characters 来访问 StringCharacterView

var runningNumber = "12345"
runningNumber = String(runningNumber.dropLast())
print(runningNumber) // 1234

Swift 3

假设runningNumber是一个String实例。在这种情况下,runningNumber.characters.dropLast()不是String类型,而是一个CharacterView:

let foo = runningNumber.characters.dropLast()
print(type(of: foo)) // CharacterView
你需要使用CharacterView来实例化一个String实例,然后将其赋值回类型为String的属性中。例如:
var runningNumber = "12345"
runningNumber = String(runningNumber.characters.dropLast())
print(runningNumber) // 1234

也就是说,针对您的情况

@IBAction func onDelPressed (button: UIButton!)  {
  runningNumber = String(runningNumber.characters.dropLast())
  currentLbl.text = runningNumber
}

@Mike97 如果 String 实例(例如 runningNumber)只包含单个字符或为空 (""),则将其 CharacterView 应用 dropLast 后得到的 String 实例将为空字符串 ("")。在空序列上应用 dropLast() 将导致一个空的(子)序列。这就是我所期望的。你会定义不同的结果吗? - dfrib
你是对的。但是,在Xcode8.3(在Sierra中)可以正常工作,而在Xcode8.2(El Capitan)中相同的代码会打印最后一个字符(如果只有一个字符)。所以后来我清理了项目,删除了“Developper”文件夹...重新运行,现在按预期打印出空行。这很奇怪,抱歉。PS我现在为这个答案投票了;-) - Mike97

2

Remove last char from string/text in swift

var str1 = "123456789"
str1.removeLast()
print(str1)

output:

12345678


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接