post Image
Stringのcharacters.countが非推奨(deprecated)になって、文字列の長さを取得する実装について

はじめに

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

screen.png

サンプル

しかし、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

no.png


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

ok.png


以下NSMutableAttributedStringのlengthプロパティ

okok.png

文字に色をつけるなどをする場合は1番下のNSMutableAttributedStringのlengthプロパティが良いのかもしれません。

NSRangeなどの範囲決定に利用するNSMutableAttributedStringのlengthは自動で利用する文字コードに対応されるのかなという疑問が残りました。(文字コードの詳しい詳細については理解できなかったです…)

参考にさせていただいた記事

見て頂いてありがとうございます。


『 Swift 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。