微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 UITextChecker 对 Swift 5

如何解决使用 UITextChecker 对 Swift 5

对于任何希伯来语文本,我都得到 true 返回值,无论文本是否包含任何真实单词:

func wordisSpelledCorrect(word: String) -> Bool {
  let checker = UITextChecker()
  let range = NSRange(location: 0,length: word.count)
  let wordRange = checker.rangeOfMisspelledWord(in: word,range: range,startingAt: 0,wrap: false,language: "he")

  return wordRange.location == NSNotFound
}
// wordisSpelledCorrect("שלום") // which is Hebrew for "peace" returns true
// but
// wordisSpelledCorrect("םולש") // which is not a real word,also returns true

我在我的设备上安装了希伯来语词典 - 我已经尝试过在“设置”>“语言和地区”中将希伯来语设置为“iPhone 语言”和不将其设置为“iPhone 语言”。有谁知道 UITextChecker 不支持希伯来语吗?如果是这样,对于不受支持的语言是否总是返回 true 的预期行为?

我在英语方面工作得很好。如果 UITextChecker 是希伯来语的失败者,那么我可以通过其他方式解决这个问题吗?无论如何,我更喜欢另一种解决方案,因为我的应用程序是通用的,而 UIKit 无法在 macOS 上运行。

[更新 1]

我花了一些时间调查访问 macOS 的语言词典,但一无所获。我不明白这是如何只需要移动设备。例如,这不是由 Apple 在 Pages 和他们自己的 Dictionary App 中实现的吗?我想我的下一步将是开始研究多语言词典 API,但是调用我知道就在系统上的东西似乎效率很低。任何想法或方向将不胜感激。

[更新 2]

根据the answers here,我正在寻找的 API 不存在,所以我必须暂停我的通用应用程序。但是回到上面的代码,除了希伯来语之外,它在我尝试过的所有语言中都可以很好地工作,有人可以帮助我让希伯来语在 iOS 上工作吗?

[更新 3]

为了完整起见,以下是适用于英语、法语、西班牙语等的代码

func wordisSpelledCorrect(word: String) -> Bool {
    if let language = NLLanguageRecognizer.dominantLanguage(for: word) {
        let checker = UITextChecker()
        let range = NSRange(location: 0,length: word.count)
        let wordRange = checker.rangeOfMisspelledWord(in: word,language: language.rawValue)
        return wordRange.location == NSNotFound
    } else {
        return false
    }
}

解决方法

检查语言是否在 UITextChecker.availableLanguages 中。否则 UITextChecker 不会发现拼写错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。