无法使用UITextChecker拼写少于七个字符的检查单词



我正试图用以下函数检查字典中是否有单词

func isReal(word: String) -> Bool {
let checker = UITextChecker()
let range = NSRange(location: 0, length: word.utf16.count)
let wordRange = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: "en")
return wordRange.location == NSNotFound
}

问题是,这只适用于七个字符或以上的单词。较短的单词即使不在字典里也会返回true。具体来说,在这种情况下,我们得到wordRange = {9223372036854775807, 0},与有效单词相同。

解决方案简单得令人尴尬。我们的字符串是大写的,UITextChecker将任何短于七个字符的大写字符串视为可能的有效首字母缩写。在较低的情况下,一切都按预期进行。

当我在Swift Playground:中使用您的函数时,我发现它运行得很好

import UIKit
func isReal(word: String) -> Bool {
let checker = UITextChecker()
let range = NSRange(location: 0, length: word.utf16.count)
let wordRange = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: "en")
return wordRange.location == NSNotFound
}
let validStrings = ["test", "fest", "fast"]
let validResults = validStrings.map{ isReal(word:$0) }
print(validResults)
let invalidStrings = ["xt", "fxxx", "srwe"]
let invalidResults = invalidStrings.map{ isReal(word:$0) }
print(invalidResults)

您的问题可能是特定于平台或版本的。

相关内容

最新更新