引用されているサイト
[Swift]iOSのデフォルトの関数を活用した Validation String Extension集
から少しコードを抜粋しますが、
Swift
1extension String {
2
3 /// 「漢字」かどうか
4 var isKanji: Bool {
5 let range = "^[\u{3005}\u{3007}\u{303b}\u{3400}-\u{9fff}\u{f900}-\u{faff}\u{20000}-\u{2ffff}]+$"
6 return NSPredicate(format: "SELF MATCHES %@", range).evaluate(with: self)
7 }
8
この中の"SELF MATCHES %@" がどういう意味になるかというと、
まず SELF は Literals より、
SELF
Represents the object being evaluated.
つまり評価対象自身、この場合は evaluate(with: self) の self となります。
このコードは String の extension なので、 self は String です。
MATCHES は String Comparisons より、
MATCHES
The left hand expression equals the right hand expression using a regex-style comparison according to ICU v3 (for more details see the ICU User Guide for Regular Expressions).
ですから、左辺の SELF(対象文字列)が右辺の正規表現を満たすかどうかをチェックしてます。
右辺は %@ になっていますが、 Parser Basics にある通り、
The format string supports printf-style format specifiers such as %x (see Formatting String Objects). Two important format specifiers are %@ and %K.
%@ is a var arg substitution for an object value—often a string, number, or date.
printf関数のようなパラメータ展開を行います。
Swift
1NSPredicate(format: "SELF MATCHES %@", range)
2
なので %@ は range、つまり
"^[\u{3005}\u{3007}\u{303b}\u{3400}-\u{9fff}\u{f900}-\u{faff}\u{20000}-\u{2ffff}]+$"
です。
これは正規表現です。
結局、対象文字列が上記の正規表現を満たすかどうかチェックしている、ということになります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/24 08:03