Swift can';如果最后一个字符为';这是一个空间

Swift can';如果最后一个字符为';这是一个空间,swift,uitextfield,uitextfielddelegate,Swift,Uitextfield,Uitextfielddelegate,我试图检查最后一个字符是否是文本字段中的空格,并将其删除。如果不是“”,下面的代码将起作用。委托是所有设置,所以不是那样 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { var cardNumber = NumberOutlet.text! if cardNumber.c

我试图检查最后一个字符是否是文本字段中的空格,并将其删除。如果不是“”,下面的代码将起作用。委托是所有设置,所以不是那样

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    var cardNumber = NumberOutlet.text!

    if cardNumber.characters.count > 1 {
        let lastChar = cardNumber[cardNumber.index(before: cardNumber.endIndex)]
        print(lastChar)

        if lastChar == " " {
            cardNumber.remove(at: cardNumber.index(before: cardNumber.endIndex))
        } else {
            _ = cardNumber.characters.dropLast()
        }
        NumberOutlet.text = cardNumber 
    }

    return true
}
只是不知道为什么我不能删除最后一个字符,如果它是一个空格


谢谢

试着用popLast而不是dropLast

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    NumberOutlet.text?.characters.popLast()
    print(NumberOutlet.text)
    return true
}

因此,代码的问题是函数永远不会知道用户何时完成键入。此外,textfield中发生的更改将在该函数返回true后生效。您应该做的是比较replacementString


因此,如果您允许返回按钮关闭键盘,我建议您在“textFieldShouldReturn”中执行此检查。否则,如果您试图阻止UITextField中出现空格,请检查replacementString是否等于“”,如果是,返回false。

如果在
shouldChangeCharacters中修改文本字段的文本,则永远不要返回
true
。您应该只使用
textField
参数。