【Swift】文字列型の種類と違い!StringやCharacterとUnicodeスカラー
この記事からわかること
- Swiftの文字列型の種類
- StringやCharacterなどのデータ型の違い
- Unicodeスカラーとは?
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
文字列符号化規格
そもそもコンピュータ上で文字列を扱うためには何かしらのデータとして保持させる必要があります。しかし文字というのは日本だけでなく世界中に存在するのでそれを一意に識別するための規格が必要になります。
文字列を符号化(一定の規則に倣ってデータ化すること)するための規格として「ASCII」や「Unicode」などさまざまな規格が提供されており、SwiftではUnicodeが採用されています。
Swiftにおける文字列型の種類
Swiftにはいわゆる文字列(Unicode)を定義するためのデータ型が複数用意されており、それぞれに役割が異なります。
種類
- String構造体:複数のUnicodeスカラー
- NSStringクラス:複数のUnicodeスカラー(Objective-C)
- Character構造体:単一のUnicodeスカラー
- CharacterSet構造体:Unicodeスカラーの集合
NSStringクラスについては以下の記事を参考にしてください。
おすすめ記事:【Swift】NSStringとは?String型との違いや使用方法
Unicodeスカラーとは?
UnicodeスカラーとはUnicodeにおいて文字を一意に表現するために使用される数値のことです。U+16進数
形式で表現され、16進数の部分は0(0000)〜1,114,111(10FFFF)
までの値を取ります。
例えばU+0041
が「A」を、U+3042
が「あ」を表すと言った感じです。
Unicodeの中にもUTF-8、UTF-16、UTF-32などの符号化方式があり、 Swiftではいずれにも対応しています。それぞれの違いは文字をどれだけのバイト数で表すかです。
Swiftでは\u{0021)
形式でUnicodeスカラーを使用して文字列を表現することが可能です。
let str:String = "Hello World\u{0021}"
print(str) // Hello World!
各データ型の違いと役割
Swiftでよく使う文字列型としてString
構造体とCharacter
構造体に焦点を当ててみます。まず両者の違いは以下の通りでした。
- String:複数のUnicodeスカラー
- Character:単一のUnicodeスカラー
ここでいうUnicodeスカラーとは一文字のことを表していて、String型はいわゆる文字列を、Character型は文字単体を表していることになるかと思います。
例えば変数に空の文字列リテラル("")を格納するとSwiftでは型推論により自動でString型になります。Character
型で保持させたい場合は明示的にデータ型を指定します。
let empty = ""
let str:String = "Hello World!"
let chr:Character = "H"
print(type(of: empty)) // String
明示的に指定しない場合はString
型になります。
let chr = "H"
print(type(of: chr)) // String
String型の役割
String型は文字列(複数のUnicodeスカラー)を保持するためのデータ型です。複数のUnicodeスカラー値として格納され、保持するだけでなく文字列の操作(追加や削除、置換など)を行うことができるようになっています。
複数のUnicodeスカラーを保持しているため、1つ1つをString型のインデックスを使用してCharacter型へ変換することが可能です。
let str = "Hello"
let index = str.index(str.startIndex, offsetBy: 3)
let chr = str[index] // l が格納される
Character型の役割
Character型は1つの文字(単一のUnicodeスカラー)を保持するためのデータ型です。
またCharacter型
を集合として操作できるCharacterSet構造体
については以下の記事を参考にしてください。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。