我正在使用Swift 2.0 / Xcode 7.0作为iOS应用。我已经建立了一个日语IME来将罗马字符转换成日语等价物。例如:
我的问题是当我尝试删除日文字符时。如果文本字段中只有一个字符,则删除键/功能按预期工作。但是,如果有多个,当我尝试删除该字符时,我在以下代码中收到can not increment endIndex
错误。
var imeInputLength: Int = 0
let currentInputValue: String = txtfldYourResponse.text!.lowercaseString
if(currentInputValue.characters.count==0) {
imeInputLength = 0
}
let inputStringToKeep: String = currentInputValue.substringWithRange(
Range<String.Index>(start: currentInputValue.startIndex.advancedBy(imeInputLength),
end: currentInputValue.endIndex))
let imeStringToKeep: String = currentInputValue.substringWithRange(
Range<String.Index>(start: currentInputValue.startIndex,
end: currentInputValue.startIndex.advancedBy(imeInputLength)))
if let imeValueDC = JIMEDC[inputStringToKeep] {
txtfldYourResponse.text = imeStringToKeep + imeValueDC
imeInputLength = (txtfldYourResponse.text?.characters.count)!-1
}
if let imeValue = JIME[inputStringToKeep] {
txtfldYourResponse.text = imeStringToKeep + imeValue
imeInputLength = txtfldYourResponse.text!.characters.count
}
currentInputValue
是文本字段中的文字。
imeInputLength
是int
(初始值= 0),在找到匹配项后,会按文本字段中的总字符数递增。
JIMEDC
和JIME
是处理从罗马字符到日文字符转换的键/值对。
我在代码运行之前将endIndex
打印到控制台。它似乎按预期递增/递减,但上面的代码块失败并出现增量错误。
我几周来一直在反对这一点,但没有任何进展。
修改:澄清了对imeInputLength
的处理,并添加了其他代码以便澄清。
答案 0 :(得分:0)
与l'L'的一次对话使我走上正轨。我对错误消息can not increment endIndex
感到困惑。实际上,我在我的范围内创建了一个越界错误。
按下退格键时,我没有修改imeInputLength
以反映输入字符串的新长度。因此,我的advanceBy
金额大于更新的endIndex
金额。 Swift将其作为can not increment endIndex
投掷,但原因是startIndex
现在大于endIndex
。
我首先检查以下内容解决了这个问题:
if(imeInputLength > currentInputValue.characters.count) {
print("You must have pressed backspace")
imeInputLength = txtfldYourResponse.text!.characters.count
} else {
let inputStringToKeep:
...
}
如果按下退格键,我需要查看imeInputLength
值是否大于输入字段的当前字符数。 imeInputLength
结尾的唯一用例是使用退格键删除日文字符时。捕获此条件时,我将imeInputLength
重置为当前字符数并退出例程。
我很高兴地说我的所有用例现在都测试出来了!