[Swift 基本の型 第3回] String型
Swiftの基本の型 第3回として、下記の「Swift実践入門」を参考に、String型について学習したので、備忘録としてまとめます。
String型とは、"Hello"のような文字列表す型です。(厳密には、Unicodeで定義された任意の文字を扱えます。)
文字列を表すリテラルを文字列リテラルと言い、"abc"のようにダブルクォーテーションで文字列を囲むと文字列リテラルと認識されます。文字列リテラルは文字列を表すString型の値を生成します。文字列リテラルのデフォルトの型はString型であり、他の型として認識されない場合は型推論によりString型の値を返します。
例 )
let a = "こんにちは" // String型
特殊文字の表現
文字列リテラルは表記の都合上、"や改行などの文字をそのまま表現できません。他言語でも同じですね。
文字列リテラル上で表現するためにSwiftでのエスケープシーケンスは、\
から始まる文字列によって特殊文字を表現します。
下記に代表的なエスケープシーケンスを記載しておきます。
\n : 改行(ラインフィード) \r : キャリッジリターン(厳密には違うけど、ラインフィードと一緒) \" : ダブルクオート \' : シングルクオート \\ : コメントアウト(バックスラッシュ) \0 : null文字
例えば、改行では複数行の文字列を表現するには次のように表記します。
例 )
let b = "1\n2\n3" print(b)
実行結果
1 2 3
文字列リテラル内での値の展開
()というエスケープシーケンスを用いて、値を文字列リテラル内で展開できます。 これは例を見てもらうと、ああなるほど!ってなると思いますので、まずは例を!
例) Int 型の 1 + 2 の演算結果を文字列リテラルに差し込み
let c = 1 + 2 let d = "結果: \(c)" print(d)
実行結果
結果: 3
つまり、この記法を使用すると、式の結果を文字列リテラルに差し込むことが可能になります。
同様にString型の値を文字列リテラルに差し込むことも可能です。
例) String型の"こんにちは"を文字列リテラルに差し込み
let e = "こんにちは" let f = "結果: \(e)" print(f)
実行結果
結果: こんにちは
複数行の文字列リテラル
複数行にまたがる文字列を書きたい場合は、複数行の文字列を"""
で囲んで書きます。
この方法を使うと \n
とかを描かなくても複数行で表現できるので、長い文章などを書くときは便利ですね。
例)
let g = """ こんにちは 今回は 基本的な型を... """ print(g)
実行結果
こんにちは 今回は 基本的な型を...
注意!
複数行の文字列リテラル内のインデントは、終了の"""の位置が基準となります。
下記の例では、「基本的な型を...」の部分が基準位置となるので、二行目の「今回は」の部分は一個分インデントがずれて表記されることになります。
例)
let h = """ こんにちは 今回は 基本的な型を... """ print(intro2)
実行結果
こんにちは 今回は 基本的な型を...
また複数行の文字列リテラルでは、下記の2つのコンパイルエラーに注意してください。(僕もたまにやらかします。。笑)
1) """と同じ行に文字列を書くとコンパイルエラー!
2) 複数行の文字リテラルについて、終了の"""よりもインデントが浅い行を書いた場合はコンパイルエラー!
数値型との相互変換
String型と数値型の相互変換にはイニシャライザを使用します。イニシャライザとは、、、?って人は↓を参考にしてみてください!
[Swift 基本の型 第二回] 数値型
https://kafappfactory.hatenablog.com/entry/2020/05/08/144722
下記の例のようにInt型の値をString型に変換する場合は、String型のイニシャライザを使用します。
例 )
let i = 123 let j = String(i) print(j)
実行結果
123
String型の値をInt型に変換する場合は、今の例の逆でInt型のイニシャライザを使用します。
注意!
文字列は必ずしも数値のフォーマットになっているとは限らないので、String型から数値型への変換は失敗する可能性があります。下記の例に示す通り、123
のような文字列を数字に変換することはできますが、abc
のような文字列は該当する数字がないため、結果としてnil
が出力されます。
例 )
let k1 = "123" let k2 = Int(k1) print(k2) let k3 = "abc" let k4 = Int(k3) print(k4)
実行結果
123 nil
補足すると、nilを含む型としてInt型のイニシャライザはnilとなり得るOptional
String型の操作
String型の操作として比較と結合があります。そこまで難しくない内容ですので、例を参考にしていただければ理解できると思います!
比較
例 )
let l1 = "abc" let l2 = "def" print(l1 == l2)
実行結果
false
結合
例 )
let m1 = "abd" let m2 = "def" print(m1 + m2)
実行結果
abcdef
終わりに
今回、Swift 基本の型 第3回としてString型についてまとめました。基本的にはダブルクォーテーションを付けて使うだけなんですが、数値型と同じく型変換の部分でエラーを出してしまうかもですね笑。
次回は私も理解が難しかったOptional型、、、頑張っていきましょう!