[Swift 基本の型 第3回] String型

f:id:KAFAppFactory:20200524203313j:plain

Swiftの基本の型 第3回として、下記の「Swift実践入門」を参考に、String型について学習したので、備忘録としてまとめます。

gihyo.jp

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型、、、頑張っていきましょう!