【Swift】文字列型の種類と違い!StringやCharacterとUnicodeスカラー

この記事からわかること

  • Swift文字列種類
  • StringCharacterなどのデータ型違い
  • Unicodeスカラーとは?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

文字列符号化規格

そもそもコンピュータ上で文字列を扱うためには何かしらのデータとして保持させる必要があります。しかし文字というのは日本だけでなく世界中に存在するのでそれを一意に識別するための規格が必要になります。

文字列を符号化(一定の規則に倣ってデータ化すること)するための規格として「ASCII」や「Unicode」などさまざまな規格が提供されており、SwiftではUnicodeが採用されています。

Swiftにおける文字列型の種類

Swiftにはいわゆる文字列(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構造体に焦点を当ててみます。まず両者の違いは以下の通りでした。

ここでいう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構造体

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構造体

Character型は1つの文字(単一のUnicodeスカラー)を保持するためのデータ型です。

またCharacter型を集合として操作できるCharacterSet構造体については以下の記事を参考にしてください。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index