文字列の中に、絵文字があるか判定する必要があったので、そのやり方を調べたので、メモ。
ネットで調べていると色々と方法が出てくるのですが、どれもしっくりこず・・・
下記のソースコードで自分的には納得いく結果が出ました。
全ての絵文字を調査した訳ではないので、漏れがあるかも・・・?
extension Character {
var isEmoji: Bool {
guard let scaler = unicodeScalars.first else { return false }
return scaler.properties.isEmoji && (scaler.value >= 0x203c || unicodeScalars.count > 1)
}
}
var name: String
name.contains(where: { $0.isEmoji })
文字をスカラーに変換して、そのpropertiesから、isEmojiという変数でBool値が取得できるようです。
※isEmojiだけでは、数字が絵文字判定されてしまいました。
他にも、「isEmojiModifier」「isEmojiPresentation」などあるのですが、絵文字の中には判定されない絵文字があるようで・・・「isEmojiModifier」「isEmojiPresentation」これで絵文字判定されなかった絵文字が「isEmoji」だと絵文字判定されているようでした。
「isEmoji」で絵文字が判定されるが、数字も判定されたりするので、上記コードのように書く必要があるっぽい・・・
できれば、この辺の詳しい事を調べたいところです・・・_φ(・_・
コメント