Swift

Swift:フィルタの検索(コンテンツブロック)

文字列の中に該当するフィルタが存在するかどうかチェックするメソッドを作りました。

このメソッドはヒットした最初の位置をNSRangeで戻します。NSRangeの配列になっている理由は、すべての文字列をスキャンするメソッドと整合を図るためです。

ポイントは次の通りです。

  • 正規表現チェックで得られたNSRegularExpression(ここではwX.rRegular)を利用する。
  • メイン側では、チェック範囲pRangeを更新する必要がある。つまり文字列の範囲は順次小さくなるべきで、そうでないとループする。
  • 蛇足になるが、メイン側では、当該フィルタの検索で得られた箇所(NSRange)の文字列に対して適切な処理をしないと、コンテンツブロックにならない。
  • rangeOfFirstMatchInString ヒットした最初のフィルタの範囲だけ抽出
  • matchesInString ヒットしたすべてのフィルタの範囲を抽出
  • 複数のフィルタをスキャンする場合、rangeOfFirstMatchInStringで回したほうが単純。

Screenshot 2016-05-05 15.05.02