はじめに
characters.count
と実際に人が見てカウントできる数を取得していたのですが、
(正確にできるようになったのはどうもSwift4.0.0以降?)
Qiita Swift の文字列の長さ yamoridon様の記事
Xcode9.1以降ではStringのcharacters
プロパティが非推奨になっていました。

サンプル
しかし、Swift4.0.0以降でcount
プロパティが強力になったようで、これを使うと良いのかもしれません。例を示します。
今までのcharacters.count
と同じ値を出すものを探してみました。
let text = "ABCDEFG"
print(text.utf8.count) // 7
print(text.utf16.count) // 7
print((text as NSString).length) // 7
print(text.utf8CString.count) // 8
print(text.unicodeScalars.count) // 7
print(text.count) // 7
print(text.characters.count) // 7 deprecated
print(text.underestimatedCount) // 7
//////////////////////////////////////////////////////////
let text = "ABC😄DEF"
print(text.utf8.count) // 10
print(text.utf16.count) // 8
print((text as NSString).length) // 8
print(text.utf8CString.count) // 11
print(text.unicodeScalars.count) // 7
print(text.count) // 7
print(text.characters.count) // 7 deprecated
print(text.underestimatedCount) // 7
//////////////////////////////////////////////////////////
let text = "ABC👩👩👧👦DEF"
print(text.utf8.count) // 31
print(text.utf16.count) // 17
print((text as NSString).length) // 17
print(text.utf8CString.count) // 32
print(text.unicodeScalars.count) // 13
print(text.count) // 7
print(text.characters.count) // 7 deprecated
print(text.underestimatedCount) // 7
ちなみに、UITextViewなどに入っている文字(NSMutableAttributedStringなど)に対して色をつけるなどのNSRangeを決定する際は見た目のカウント数で取得してはうまく行かなかったりします。
以下string.count

以下string.utf16.count
((text as NSString).length
と同じ)

以下NSMutableAttributedStringのlengthプロパティ

文字に色をつけるなどをする場合は1番下のNSMutableAttributedStringのlengthプロパティが良いのかもしれません。
NSRangeなどの範囲決定に利用するNSMutableAttributedStringのlengthは自動で利用する文字コードに対応されるのかなという疑問が残りました。(文字コードの詳しい詳細については理解できなかったです...)
参考にさせていただいた記事
見て頂いてありがとうございます。