Strings and Characters

昨日に引き続いて Strings and Characters https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html を読んでいる。 世の中知らんことが多い。

新しく知ったこと

  • 複数行の文字列リテラルは文字列の開始と終了のどちらも改行を含まない
  • 改行を含めないなら行末に \
  • 改行を含めるなら空行を入れる
  • 周りのコードに合わせてインデントできる
  • """ を含める場合は1文字 \でクオートする
  • 文字列の変更可能性 は varlet かで違える。クラスを違える NSString NSMutableString のやり方とは異なる
  • String を 1 Character ずつ反復 for character in "Dog!🐶" {
  • Character 型の値は型アノテーションして1文字の文字列から作る let c: Character = "!"
  • Character 配列を作る let a: [Character] = ["C", "a", "t", "!", "🐱"]
  • 複数行文字列リテラル++=で行として連結するときは追加される方に空行を入れておけばよい
  • Swift の String はUnicodeスカラ値からなる。 Unicodeスカラ値は21ビット数値である
  • Unicodeスカラ値は UnicodeコードポイントU+0000からU+D7FFまでを含む。U+E000 から U+10FFFFまでを含む。 U+D800 から U+DFFF まで サロゲートペアは含まない
  • "\u{E9}""\u{65}\u{301}" は同じ文字(é)
  • Unicodeスカラ値が増えても、文字数は増えない場合がある var word = "cafe"word.count4の状態から、word += "\u{301}"アクセント記号を最後にくっつけても word.count4のまま増えない
  • Stringcountは、NSStringlengthとは、必ずしも一致しない
  • Stringに含まれるCharacterを位置でアクセスするのはIntではなくString.Index
  • 最初の文字 s[s.startIndex] 最後の文字 s[s.index(before: s.endIndex)]
  • 最後に追加 s.insert("〜", at: s.endIndex)
  • 最後の文字の直前に挿入 s.insert(contentsOf: "〜", at: s.index(before: s.endIndex))
  • 最後の1文字を削除 s.remove(at: s.index(before: s.endIndex))
  • substring let t = s[..<index]
  • substring は Substring型。短い期間だけ使う。長い期間保持するにはStringに変換する
  • UTF-8バイト列を取り出すには s.utf8