文字列操作

標準関数

✅ 指定した文字で分割する(components)

特徴[String]の配列を返す。空の要素も保持される。

"a,b,,c,".components(separatedBy: ",") → ["a", "b", "", "c", ""](空要素もそのまま)

用途: 元の文字列の構造を保ちたい場合、特にインデックスが重要な場合。

👉 String を配列に分けて取り出すイメージ。

✅ 指定した文字で分割して配列にする(split)

  • 特徴Substringの配列を返す。空の要素は削除される。
  • "a,b,,c,".split(separator: ",") → ["a", "b", "c"](末尾の空、連続する空が除去)
  • 用途: フィルタリングされた結果を得たい場合、mapfilterと組み合わせやすい。

👉 split は Substring を返すので、必要なら String(before) に変換して使います。

✅ インデックスを使って抽出する(firstIndex)

Swift には直接 InStr はありませんが、firstIndex(of:) で特定の文字の位置を探せます。

👉 これは VBA の InStr → Mid$ に近い発想です。

✅ 配列内の要素を連結する(joined)

Swiftの String.joined()メソッドは、文字列の配列([String]を、指定した区切り文字(separator)を使って一つの文字列に結合(連結)するための非常に便利な機能で、元の配列には影響を与えず、結合された新しい文字列を返します。例えば、["apple", "banana", "cherry"]という配列をカンマ区切りで結合するなら array.joined(separator: ",") で "apple,banana,cherry" が得られます。

joined(): 区切り文字なしで単純に連結します。

joined(separator:): 指定した文字列を区切り文字として使います。

ポイント

  • 戻り値: 結合された新しい文字列が返されます。元の配列は変更されません。
  • String型の配列([String])に対して使用します。
  • **map()との組み合わせ**: 配列の各要素を変換してから結合したい場合にmap()`と組み合わせると強力です。

✅ 文字列を全て小文字にする(lowercased)

全角文字への対応
半角だけでなく、全角の英大文字・小文字も正しく変換されます

✅文字列を全て大文字にする(uppercased)

文字列が特定の接頭辞(プレフィックス)で始まっているかどうかをブール値 (true/false) で返す(hasPrefix())

解説

  1. hasPrefix(_:) の利用
    • if condition.hasPrefix("くもり") の部分では、変数 condition に格納されている文字列が**「くもり」で始まっている**かどうかを判定しています。
      • 例: "くもりのち晴れ" → true
      • 例: "晴れときどきくもり" → false
    • 同様に、else if condition.hasPrefix("晴れ") で**「晴れ」で始まっている**かどうかを判定しています。
  2. @ViewBuilder の活用
    • ここでは、条件分岐のロジックを**weatherText(condition:)**というヘルパー関数に分離しています。@ViewBuilderアトリビュートを付けることで、この関数がViewを返すことを宣言し、if/elseによる条件分岐を自然に記述できるようにしています。
  3. より複雑な処理(もし必要なら)
    • 特定の文字で文字列を分割したい場合は、**split(separator:)**を使います。

ただし、最初の文字の判定だけであれば、hasPrefix() が最も直感的でパフォーマンスも優れています。

文字列、参照系

特定の文字列や値があるかどうか(contains)

contains()メソッドは、文字列や配列、Set(集合)などのコレクション型に、指定した要素(文字や値)が含まれているかどうかを判定する便利なメソッドです。含まれていればtrue、含まれていなければfalseを返します。主にコレクション内の高速な存在チェック(Setでは特に高速)や、文字列内の部分文字列の有無を確認する際に使われます

使い方

1. 文字列(String)の場合

特定の文字列(部分文字列)が含まれるかを確認します。

2. 配列(Array)やSet(集合)の場合

特定の要素がコレクション内に存在するかを確認します。

主な特徴

  • 戻り値Bool型(trueまたはfalse)。
  • 高速性Setでは内部的にハッシュテーブルを使用しているため、要素の存在確認が非常に高速(平均O(1))です。
  • 汎用性StringArraySetなど、Sequenceプロトコルに準拠した様々なコレクション型で利用できます。 

contains()メソッドは、コードを簡潔にし、要素の有無を直感的にチェックできるため、Swiftプログラミングで頻繁に利用されます

正規表現

✅ 基本:マッチするか調べる

👉 /pattern/ という書き方で、文字列にそのパターンがあるかどうか確認できます。

✅ グループで抽出する

例えば「英語名,日本語名」の形式から2つに分けたいとき:

(.+) → 1つ目のグループ(カンマ前)
・(.+) → 2つ目のグループ(カンマ後)
match.1match.2 で取り出せます

✅ ちょっとしたパターン例

  • /\d+/ → 数字だけ取り出す
  • /[A-Za-z]+/ → 英字だけ取り出す
  • /^W.+i$/ → Wで始まり iで終わる文字列

✅ 旧来の NSRegularExpression もある

昔からある API もまだ使えます。
ただし、SwiftUI コードでサクッとやるなら新しい /正規表現/ リテラルの方が直感的でオススメです。

🎯 まとめると:

  • Swift 5.7+ なら /pattern/ 記法でシンプルに書ける
  • firstMatch を使うとグループにアクセスできる
  • VBA よりもはるかに強力で安全(型付きの結果が返る)

コメント

タイトルとURLをコピーしました