【发布时间】:2019-01-05 17:39:54
【问题描述】:
我试图检测 UITextfieldDelegate 内的退格键。 并找到了这个答案。 https://stackoverflow.com/a/49294870/911528
而且它工作正常。
但我不知道这个函数内部发生了什么。
let char = string.cString(using: String.Encoding.utf8)!
let isBackSpace = strcmp(char, "\\b")
if isBackSpace == -92 {
print("Backspace was pressed")
return false
}
- 我不知道为什么退格的 cString 的结果是 0。 我可以在 XCode 上调试。请检查屏幕截图。
- 我不知道为什么退格的 strcmp 大约为 0(据我在 XCode 调试器上得到这个值)和“\b”字符返回 -92
我知道退格的 ascii 代码是 int 类型的“8”,所以我认为上面的函数会像下面的代码。
// I thought this char would be "\b" of type char or 08 of type int
// but XCode give the value 0... I don't know why
let char = string.cString(using: String.Encoding.utf8)!
// as far as I know, strcmp returns positive value for equal values.
let isBackSpace = strcmp(char, "\\b")
// so I thought this would be
if isBackSpace > 0 {
print("Backspace was pressed")
return false // or true
}
谁能一步一步解释这段代码? 谢谢。
参考:
https://linux.die.net/man/3/strcmp
https://theasciicode.com.ar/ascii-control-characters/backspace-ascii-code-8.html
现在我可以理解人们为什么使用该代码了, 而且上面的代码不正确。
参考@Cristik 的回答尝试正确编辑。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// backspace checking
if string == "" {
return true // or false
}
【问题讨论】:
标签: swift strcmp uitextfielddelegate backspace