Swiftの複数行Stringリテラルまとめ
\nをやらなくてもよい
今更ながらSwiftの複数行Stringリテラルを知ってわりと喜ばしいので、ここにまとめる。
Swiftのバージョンは4.2
基本
3つのダブルクオテーションで次のように囲む。
let sampleString = """
あいうえお
かきくけこ
さしすせそ
"""
これは従来の方式で表した次のものと同等である。
"あいうえお\nかきくけこ\nさしすせそ"
ソースコード上の改行が生成物に残る。注意すべきことは「あ」の前と「そ」の後に \n
がないこと。
単独の ” の扱い
ひとつの "
を終わりの記号と見なさないので、自由に "
を含めることが出来る。
let quotation = """
The White Rabbit put on his spectacles. "Where shall I begin,
please your Majesty?" he asked."Begin at the beginning," the King said gravely, "and go on
till you come to the end; then stop."
"""
3つの “ の扱い
"
を3つ連続したいときは、\を用いて、裸の "
が3つ並ぶのを回避する。
let threeDoubleQuotationMarks = """
はじめのひとつをエスケープ\"""
3つ全部をエスケープ\"\"\"
"""
生成したものの中身は
はじめのひとつをエスケープ"""\n3つ全部をエスケープ"""
改行コードを入れない
特定の行に改行コードを入れないことが出来る。\を用いる。
let sampleString = """
あいうえお
かきくけこ\
さしすせそ
"""
これは次と同等
"あいうえお\nかきくけこさしすせそ"
始めと終わりに改行コードを入れる
始めと終わりに改行コードをいれるには空の行を追加すればよい。
let sampleString = """あいうえお
かきくけこ
さしすせそ"""
Mediumの仕様により空の行の追加がうまくいかないが、空の行を入れたとする。これは次と同等
"\nあいうえお\nかきくけこ\nさしすせそ\n"
インデント処理
行の左端から文字を書くのはコードが見にくくなるので次のように先頭にスペースを複数書いてもよい。
let sampleString = """
あいうえお
かきくけこ
さしすせそ
"""
これは
"あいうえお\nかきくけこ\nさしすせそ"
と同等。スペースの処理はこのように行われる
- 終わりの
"""
の前にあるスペースを数える。この場合4個。 - それぞれの行から4つ分の先頭スペースを排除
よって次のものは
let sampleString = """
あいうえお
かきくけこ
さしすせそ
"""
こうなる
"あいうえお\n かきくけこ\nさしすせそ"
ちなみにスペースの代わりにタブでやってみたらタブでも大丈夫だった。
また、当然次のものも気になるが
let sampleString = """
あいうえお
かきくけこ
さしすせそ
"""
形式が正しくないのでコンパイルエラーになる。
結合
+
などを用いて結合する際はちょっとしたコツがいる。
let badStart = """
one
two
"""let end = """
three
"""print(badStart + end)
とすると、結果は
one
twothree
となり、意図した結果ではないだろう。次に
let goodStart = """
one
two"""
print(goodStart + end)
のように空白行を一行空けると(Mediumの仕様により…入れたとする)結果は
one
two
three
となる。
おまけ
ローカライズすると、文章は localizable.strings に入れることが多いので、恩恵を受ける機会は少し限定される。