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学習の備忘録として書いています。
もし間違い等ありましたらご指摘お願いいたします。