トラック
/
Swift
Swift
/
演習
/
Calのオーダーメイド看板店
Calのオーダーメイド看板店

Calのオーダーメイド看板店

学習演習

はじめに

文字列はテキストデータを表します。 Swiftでは、StringはCharacter値の順序付きコレクションで、各文字はUnicode文字を表します。

文字列は、文字列リテラルを使って作成します。文字列リテラルとは、二重引用符(")で囲まれた文字の並びです。 複数行の文字列には、二重引用符を3つ並べたもの(""")を使います。

let hello: String = "Hello, World!"

let poem: String = """
Roses are red,
Violets are blue.
Sugar is sweet,
And so are you.
"""

Swiftの文字列は、FoundationフレームワークのNSStringクラスとシームレスに連携し、豊富なテキスト処理機能を利用できます。

文字

Characterは、1つの拡張書記素クラスタを表します。これは、1つ以上のUnicodeスカラー値からなる、人間が読める文字です。 Unicodeスカラー値は、U+0000からU+D7FFまで(両端を含む)、またはU+E000からU+10FFFFまでの範囲の21ビットのコードポイントです。

let aChar: Character = "A"

型推論

文字列リテラルを書くと、Swiftはその型を自動的にStringと推論します。 1文字をCharacterとして格納するには、型注釈を明示的に書く必要があります。

let aString = "A"        // Inferred as String
let aChar: Character = "A" // Explicitly typed as Character
print(type(of: aString)) // Prints String
print(type(of: aChar))   // Prints Character

// The following code will not compile:
let badChar: Character = "Too many characters"
// Error: Cannot convert value of type 'String' to specified type 'Character'

連結

文字列は、加算演算子(+)を使って連結できます。

print("honey" + "comb")
// Prints "honeycomb"

まず文字を文字列に変換しない限り、+を使ってCharacterをStringに直接連結することはできません。 ただし、append(_:)メソッドを使えば、文字列または文字を可変の文字列に直接追加できます。

var greeting = "Hello"
let world = ", world"
let period: Character = "."

greeting.append(world)
print(greeting) // Prints "Hello, world"

greeting.append(period)
print(greeting) // Prints "Hello, world."

文字列補間

文字列補間を使うと、定数、変数、リテラル、式を文字列リテラルの中に埋め込んで文字列を組み立てられます。 各式は、バックスラッシュを前に付けた括弧(\( ... ))で囲みます。

let radius = 5.0
let circle = "The area of a circle with radius \(radius) is \(Double.pi * radius * radius)"
print(circle) // Prints "The area of a circle with radius 5.0 is 78.53981633974483"

文字列と文字のプロパティ

文字列と文字には、内容を調べるためのプロパティがいくつかあります。

文字列のプロパティ

よく使う文字列のプロパティには、次のようなものがあります。

プロパティ 説明 例
isEmpty 文字列に文字が1つもない場合にtrueを返します "Hello".isEmptyはfalseと評価されます
count 文字列に含まれる文字の数を返します "Hello".countは5と評価されます

プロパティの完全な一覧は、AppleのStringドキュメントを参照してください。

文字のプロパティ

よく使う文字のプロパティには、次のようなものがあります。

プロパティ 説明 例
isLowercase 文字が小文字の場合にtrueを返します "a".isLowercaseはtrueと評価されます
isUppercase 文字が大文字の場合にtrueを返します "A".isUppercaseはtrueと評価されます
isNumber 文字が数字の場合にtrueを返します "1".isNumberはtrueと評価されます
isWhitespace 文字が空白文字の場合にtrueを返します " ".isWhitespaceはtrueと評価されます

プロパティの完全な一覧は、AppleのCharacterドキュメントを参照してください。

型変換

String(_:)イニシャライザを使うと、他の型を文字列に変換できます。IntやDouble、Characterなどの標準的な型に対応しています。

let charX: Character = "x"
print(String(charX))     // Prints "x"
print(String(110))       // Prints "110"
print(String(Double.pi)) // Prints "3.141592653589793"

特殊文字

Swiftの文字列リテラルは、特殊文字を表すいくつかのエスケープシーケンスに対応しています。

シーケンス 説明
\0 ヌル文字
\\ バックスラッシュ
\t 水平タブ
\n ラインフィード(改行)
\r キャリッジリターン
\' 単一引用符
\" 二重引用符
\u{n} 任意のUnicodeスカラー(16進数)
let quote: String = "\"Hello\", he said."
print(quote) // Prints "Hello", he said.

let unicode: Character = "\u{1F496}"
print(unicode) // Prints 💖

説明

この演習では、看板会社がオリジナルのメッセージ入り看板を作るのを手伝うコードを書きます。

1. 便利な文字列を用意する

看板を作るために使う、次の定数文字列を定義します。

  • birthday: 値は"Birthday"です
  • valentine: 値は"Valentine's Day"です
  • anniversary: 文字列"Anniversary"を持ちます

2. 便利な文字を用意する

看板を作るために使う、次の定数文字を定義します。

  • space: 値は" "(半角のスペース1つ)です
  • exclamation: 値は"!"です

3. フレーズを組み合わせてメッセージを作る

関数buildSign(for:name:)を実装します。この関数は、引数forと引数nameを取ります。forには、最初のタスクで定義した3つの文字列のうちの1つが入ります。nameは文字列で、看板を贈る相手の名前が入ります。 連結を使って看板のメッセージを組み立てましょう。すでに定義した定数を再利用するのを忘れないでください。 関数は看板のメッセージを文字列として返します。

buildSign(for: birthday, name: "Otto")
// returns "Happy Birthday Otto!"

buildSign(for: anniversary, name: "Valentina")
// returns "Happy Anniversary Valentina!"

4. 卒業サインを作る

関数graduationFor(name:year:)を実装します。この関数は、引数nameと引数yearを取ります。nameは文字列で、看板を贈る相手の名前が入ります。yearは整数で、その人が卒業する年が入ります。 テンプレート文字列を使って看板のメッセージを組み立てましょう。 関数は看板のメッセージを文字列として返します。

graduationFor(name: "Padma", year: 2023)
// returns "Congratulations Padma!\nClass of 2023"

5. サインの費用を計算する

関数costOf(sign:)を実装します。この関数は、引数signを取ります。signは文字列で、看板のメッセージが入ります。 看板の基本料金は、所定の通貨で20です。さらに、1文字ごとに2かかります(空白も計算に含まれます)。 関数は看板の費用を整数として返します。

costOf(sign: "Happy Birthday Grandma!")
// returns 66
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Swift Exercism

Calのオーダーメイド看板店を始める準備はできましたか?

Exercismに登録すれば、35個のコンセプト116個の演習、そして本物の人間によるメンタリングとともに、Swiftを学んでマスターできます。すべて無料です。