SwiftUIで開発をしているときに、
「String型の変数に格納された文字列のスペルをチェックしたい。」
こんな時ってよくありますよね(いや、ない)。
そんな時はUIKitのUITextCheckerを使ってスペルチェックしちゃいましょう。
(備忘録的に自己満足で書いてるのであしからず)
UITextCheckerとは?
UITextChecker はUIKitで用意されているNSObjectを継承したクラスです。
インスタンスを作成して使います。
どんなコードを書いて使うの?
スペルチェックを行う関数を作りたい時は、
func spellCheck(word: String) -> Bool {
let checker = UITextChecker()
let range = NSRange(location: 0, length: word.utf16.count)
let misspelledRange = checker.rangeOfMisspelledWord(
in: word,
range: range,
startingAt: 0,
wrap: false,
language: "en")
return misspelledRange == NSNotFound
}
引数wordにスペルチェックしたいワードをString型で渡して、スペルが合っていたらtrueを返します。
いろいろ説明
NSRange
UITextCheckerを使うにはNSRangeという、まあ簡単に言うとスペルチェックをする範囲はどこですか?って質問に答えてあげる必要があります。その答えとしてNSRangeを引数として渡す必要があるわけです。
word.utf16.count
NSRangeを取得するには文字列の長さを渡してあげる必要がありますが、文字列がどの文字コード(utfとかjisとか)を使っているのかで長さが変わるので、utf16に変換して統一してから文字列wordの長さを渡してあげる必要があるわけです。
rangeOfMisspelledWord
実際にスペルチェックを行うのはこのメソッドです。
UITextCheckerのインスタンスメソッドであるこのメソッドを呼び出すことで、文字列の中の間違っている箇所を表したRangeを返します。もし文字列のスペルが合っていたらNSNotFoundが返されます。
最後に
SwiftUI学習の備忘録として書いています。
もし間違い等ありましたらご指摘お願いいたします。