38
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swiftで文字列長

Last updated at Posted at 2014-06-26

追記2
っていう追記も古くなりまして。。
Swift2 ではもっとシンプルですね。
aString.characters.count

追記1
下記の記事はちょっと古いです。
Swift 1.2 では count 関数を使って文字列長を求めます

println( count( aString ) ) 

##utf16count と countElements
NSString にあったlength プロパティがSwintのStringには存在せず、代わりにutf16countで文字列長を取得するっぽい。
もしくはStringのbridgeToObjectiveCメソッドでNSStringに変換してlengthプロパティにアクセスしても同等の挙動になる。

ただ、絵文字が入ってるとちょっと厄介

var st = "?"
//NSStringとしてlengthプロパティにアクセス
println( st.bridgeToObjectiveC().length ) //2
//あるいは utf16count
println( st.utf16count )//2

ん、2文字?

println( st.lengthOfBytesUsingEncoding( NSUTF16StringEncoding )) //4

4バイトで表現される絵文字は utf16count ( または NSStringのlength ) プロパティ経由だと2文字としてカウントされてる...
ちょっと調べてみたところ、NSStringのlengthはUTF-16を2バイトコードとみなしてカウントしちゃってるっぽい。これはObjective-C NSStringの元々の挙動であり、Swiftでも互換性を保ってるという事らしいね。

println( countElements( st3 ) ) // 1

SwiftではcountElementsというグローバル関数が提供されており、文字列の各文字それぞれが、2バイト or 3バイト or 4バイト であるのかをチェックしてカウントしてくれるそうな。
ただ、重たそうなので長い文字列のカウントは注意したほうが良いとの事。

38
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?