CharacterSetを定義する

CharacterSetとは

言葉通り文字の集合である。Appleのドキュメントにも書いてあるが、文字列の中から特定の文字を検索したいときなどに使う構造体。自分も以前そのような用途で使ったことがある。
CharacterSet - Foundation | Apple Developer Documentation

CharacterSetを定義する

自分は以前CharacterSetを使用したことがあるが、static varで既に定義されているdecimalDigitsalphanumericsしか使ったことがない。しかし、先日ドキュメントを眺めていたら、コンストラクタinit(charactersIn:)を呼べば、自分でも定義できることを知った。

// 文字a, b, cを含んだ文字の集合
let abcSet = CharacterSet(charactersIn: "abc")

CharacterSetを使用する例

自分でCharacterSetを定義できれば、そのCharacterSetを使い文字の検索ができる。例えばこんな感じ。

extension CharacterSet {
    // 16進数で使用する文字の集合を定義
    static var hexDigits = CharacterSet(charactersIn: "0123456789ABCDEFabcdef")
}

func checkHexDigits(from string: String) {
    // 文字列に16進数表す文字以外が含まれていないかチェック
    if string.rangeOfCharacter(from: CharacterSet.hexDigits.inverted) != nil {
        print("target string(\(string)) contains non hex digits")
    }
}

var colorCode = "ffFFff"
checkHexDigits(from: colorCode)

colorCode = "ffFFfg"
checkHexDigits(from: colorCode)

実際にPlaygroundで実行すると以下となる。 "ffFFfg"の'g'はhexDigitsに含まれてないので出力される。 f:id:culumn:20180531230628p:plain

アプリを開発する際も、このようにCharacterSetを定義して、バリデーションなどに使えると思う。