gpt4 book ai didi

ios - 删除日文字符时 Swift "can not increment endIndex"

转载 作者:行者123 更新时间:2023-11-28 08:56:42 26 4
gpt4 key购买 nike

我正在为 iOS 应用程序使用 Swift 2.0/Xcode 7.0。我已经构建了一个日语 IME 来将罗马字符转换为对应的日语。例如:

  • 输入“a”会将“a”转换为“あ”
  • 在键入下一个字符之前,键入“k”将不会执行任何操作(在日语中不匹配),例如键入“k”然后键入“a”将导致“か”

我的问题是当我尝试删除日文字符时。如果文本字段中只有一个字符,删除键/功能将按预期工作。但是,如果有多个字符,当我尝试删除该字符时,我会在以下代码中收到 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),在找到匹配项后按文本字段中的总字符数递增。

JIMEDCJIME 是处理从罗马字符到日文字符转换的键/值对。

我在代码运行之前将 endIndex 打印到控制台。它似乎按预期递增/递减,但上面的代码块因递增错误而失败。

几周来我一直在努力反对这个问题,但没有任何进展。

编辑:澄清了 imeInputLength 的处理并添加了额外的代码以进行澄清。

最佳答案

与 l'L'l 的边谈让我走上了正轨。我对错误消息 can not increment endIndex 感到困惑。实际上,我在我的范围内制造了一个越界错误。

当按下退格键时,我并没有修改 imeInputLength 来反射(reflect)输入字符串的新长度。结果,我的 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 重置为当前字符数并退出例程。

我很高兴地说,我所有的用例现在都测试呈阳性!

关于ios - 删除日文字符时 Swift "can not increment endIndex",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32858509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com