見出し画像

Lesson2.1 Strings

テキストはどこにでもあります。
看板、ソーシャルメディア、請求書、シリアルボックスにあります。したがって、テキストが私たちの世界の他の場所と同じくらいプログラミングに不可欠であることは驚くことではありません。

このレッスンでは、文字列型を使用してテキストを作成して保存する方法を学びます。2つの文字列を比較したり、文字列内の特定の文字にアクセスしたり、値を挿入および削除したりできるさまざまなStringメソッドを学びます。

あなたが学ぶこと
・文字列を宣言する方法
・2つの文字列を比較する方法
・文字列内の特定の文字にアクセスする方法

“Vocabulary
case sensitivity
concatenation
equality
escape character
index
literal
range
string interpolation
substring
Unicode

p.116 
前のレッスンでは、象徴的な「Hello, world!」を印刷しました。string。あなたは「こんにちは、世界!」を作成しました。文字のコレクションをひもでつなぐことによって。Swiftの文字列は文字列型で表され、文字列を定義する最も一般的な方法は文字列リテラルを使用することです。

文字列リテラルは、文字列値の生の表現です。文字列リテラルは、二重引用符で文字のセットを囲んで書きます。

let greeting = "Hello"
var otherGreeting = "Salutations"


文字列リテラルは、定数または変数に初期値を提供するために使用できます。

Letを使用して定数に文字列を割り当てると、文字列は不変であり、変更できません。変数に文字列を割り当てることで、文字列の変更を許可します。

文字列リテラルを複数行にする必要がある場合は、3つの二重引用符 " " "で文字セットを囲むだけです。複数行形式では、文字列リテラルには、開始引用符と終了引用符の間のすべての行が含まれます。文字列は、開始引用符の後の最初の行で始まり、終了引用符の前の行で終わります。

“let joke = " " "
  Q: Why did the chicken cross the road?
  A: To get to the other side!
  " " "
print(joke)
Console Output:
Q: Why did the chicken cross the road?
A: To get to the other side!


終了引用符 (""") の前の空白は、他のすべての行の前に無視する空白を Swift に伝えます。文字列リテラルの両方の行に先頭に空白が含まれていましたが、最後の3つの二重引用符が等しくインデントされたため、文字列リテラルを印刷したときにそのインデントが削除されました。

p.117 
文字列に二重引用符が含まれる場合は、Swiftで知られているバックスラッシュ(\)をエスケープ文字として使用する必要があります。それはあなたがstringから逃げているからです。

let greeting = "It is traditional in programming to print \"Hello, world!\"

エスケープ文字を他の文字や記号と一緒に使用して、特定の結果を生み出すことができます。

Double quote: \"
Single quote: \'
Backslash: \\
Tab: \t
Carriage return (return to beginning of the line): \r 
空の文字列から始めて、時間の経過とともに追加したいことがよくあります。これは、変数にする必要があることを意味します。次の構文を使用して、テキストなしで文字列を初期化します。

var myString = " "

Swift文字列が空かどうかを確認する必要がある場合は、Booleanプロパティ isEmptyを使用できます。

var myString = ""

if myString.isEmpty {
  print("The string is empty")
}

予想通り、個々の文字は文字型です。
しかし、文字列は個々の文字よりもプログラミングではるかに一般的であるため、Swiftは常に推測します

p.118 
型アノテーションで特に指定しない限り、文字列としての文字のコレクションの型(さらには1文字)のタイプ

let a = "a" // 'a' is a String
let b: Character = "b" // 'b' is a Character
 

連結と補間
時々、文字列を組み合わせる必要があります。+演算子は数字だけでなく、文字列も一緒に追加できます。+を使用して、複数の文字列値から新しい文字列値を作成できます。これは連結と呼ばれます。

“let string1 = "Hello"
let string2 = ", world!"
let myString = string1 + string2 // "Hello, world!"

既存の文字列が変数の場合は、+=演算子を使用して追加または変更できます。

“var myString = "Hello"
myString = myString + ", world!" // "Hello, world!"
myString += " Hello!" // "Hello, world! Hello!"
 

文字列が複雑になるにつれて、+演算子を使用すると、コードの処理が難しくなる可能性があります。たとえば、上記のコードでは、「こんにちは!」の前にスペースを追加するのを忘れるかもしれません。

Swiftは、文字列補間と呼ばれる構文を提供し、定数、変数、リテラル、および式の包含を容易にします。文字列補間を使用すると、多くの値を1つの文字列定数または変数に簡単に結合できます。p.119 
名前の前にバックスラッシュ \ を付け、名前を括弧() で囲むことで、定数または変数の生の値を文字列に挿入できます。以下の例では、印刷された文字列には、名前と年齢定数の生の値が含まれます。
let name = "Rick"
let age = 30
print("\(name) is \(age) years old") 
//Rick is 30 years old

式全体を括弧内に配置できます。これらの式は、印刷または保存される前に、常に最初に評価されます。
let a = 4
let b = 5
print("If a is \(a) and b is \(b), then a + b equals \(a+b)")
Console Output:
If a is 4 and b is 5, then a + b equals 9

文字列補間を使用して、a定数とb定数の生の値が印刷された文字列値に挿入されます。

文字列の等価と比較
開発者は、文字列値を比較して、互いに等しいかどうかを確認する必要があることがよくあります。
数値と同様に、==演算子を使用して2つの文字列間の等価性を確認できます。予想通り、==は同じ順序で同一の文字をチェックします。大文字は小文字の文字と同一ではないため、各文字の大文字と小文字が一致する場合、文字列は同じ値になります。

let month = "January"
let otherMonth = "January"

let lowercaseMonth = "january"
 
if month == otherMonth {
  print("They are the same")
}
 
if month != lowercaseMonth {
  print("They are not the same.")
}
Console Output:
They are the same.
They are not the same.

しかし、文字列の等価性をチェックするときは、文字列の大文字化を無視したいかもしれません。Lowercased() メソッドを使用して、文字列のオール小文字バージョンと呼び出し元の文字列のオール小文字バージョンを比較して、2つを正規化できます。

let name = "Johnny Appleseed"
if name.lowercased() == "joHnnY aPPleseeD".lowercased() {
  print("The two names are equal.")
}
Console Output:
The two names are equal.

文字列の先頭または末尾を一致させたい場合は、hasPrefix(_:)またはhasSuffix(_:)メソッドを使用できます。==と同様に、これらの一致は大文字と小文字を区別します。

let greeting = "Hello, world!"
print(greeting.hasPrefix("Hello")) print(greeting.hasSuffix("world!"))
print(greeting.hasSuffix("World!"))
Console Output:
true
true
false
p.121 
ある文字列が別の文字列内のどこかにあるかどうかを確認したいかもしれません。Contains(_:)メソッドを使用して、部分文字列が見つかったかどうかを示すブール値を返すことができます。

let greeting = "Hi Rick, my name is Amy."
if greeting.contains("my name is") {
  print("Making an introduction")
}

文字列は文字のコレクションであるため、その長さは総文字数に等しい。コレクションのサイズは、countプロパティを使用して決定できます。このプロパティを使用して、文字列を比較したり、文字列が特定の要件を満たしているかどうかを評価したりできます。

let name = "Ryan Mears"
let count = name.count //10
 
let newPassword = "1234"
 
if newPassword.count < 8 {
print("This password is too short.Passwords should have at least eight characters.")}
Console Output:
This password is too short. Passwords should have at least
eight characters.
 
p.122
最後のユニットでは、switchステートメントを使用して、特定のケースに基づいて特定のコードブロックを実行できることを学びました。Switchステートメントを使用して、文字列または文字の複数の値をパターンマッチさせ、それに応じて応答することもできます。
let someCharacter: Character = "e"
switch someCharacter {
  case "a", "e", "i", "o", "u":
    print("\(someCharacter) is a vowel.")
  default:
    print("\(someCharacter) is not a vowel.")
}
Console Output:
e is a vowel.

より高度な文字列トピック

前述の lowerCased()、hasPrefix(_:)、hasSuffix(_:)、および contains(_:) メソッドと同様に、文字列には、文字列内の文字の位置を追跡したり、「部分文字列」から新しい文字列を作成したり、既存の文字列に文字や文字列を挿入したりするのに役立つさまざまなプロパティとメソッドが付属しています。この機能の多くは、すべてのSwiftコレクションで共有されています。今のところ、これらのより高度な文字列トピックを心配する必要はありませんが、Swiftでより高度な文字列操作を行う場合は、いつでもドキュメントを参照して詳細を学ぶことができることに注意してください。参考までに、調べることができる便利な文字列プロパティとメソッドをいくつか紹介します。

 startIndex
 endIndex
 index(before:)
 index(after:)
 index(_:, offsetBy:)
 substring(to:)
 substring(from:)
 substring(with:)
 insert(_:, at:)
 insert(contentsOf:, at:)
 remove(at:)
 removeSubrange(_:)
 replaceSubrange(_:, with:)”

p.123

Unicode
すべてのSwift Stringは、Unicodeと呼ばれる国際的なコンピューティング標準に準拠しています。Unicodeコンプライアンスにより、Swiftは英語の文字と記号の短いリストを超えています。代わりに、Unicodeは複数の言語で使用される128,000以上の異なる文字を網羅しています。これには、文字(é)、絵文字(👹)、記号(∞)、漢字(七)、その他の特殊文字のアクセントが含まれます。Unicodeは、これらの文字の長さが合理的であることを保証するので、「e」、「é」、「👹」はそれぞれ正しい長さが1です。さらに、Unicodeは右から左へ、左から右に読み取るテキストをサポートしています。
“let cow = "🐮"
let credentials = "résumé"
print("∞".characters.count) //1
  




この記事が気に入ったらサポートをしてみませんか?