文字列の配列に対して contains(_:)
を呼び出すと、パラメータで渡した文字列と完全に一致する要素が存在する場合にのみ true
が返ります。
そのため、質問で書かれているコードでは、想定外の挙動となります。
swift
1var subjectLINK: [String] = []
2
3// (中略: ここで `subjectLINK` に要素を追加しているものとする)
4
5if subjectLINK.contains("nagasaki") {
6 // `subjectLINK` の要素のうち少なくともひとつが
7 // "nagasaki" に一致する場合にのみ、
8 // ここに書かれたコードが実行される。
9}
意図した挙動とするためには、配列の各要素について、それぞれが "nagasaki"
を含むかどうかを確認する必要があります。文字列に対して contains(_:)
を呼び出すと、パラメータで渡した文字列を含む場合に true
が返りますので、それを利用します。
swift
1// 検出した文字列を格納する先となる配列
2var result: [String] = []
3
4var subjectLINK: [String] = []
5
6// (中略: ここで `subjectLINK` に要素を追加しているものとする)
7
8// 文字列を1つずつ取り出して条件を満たすかチェックする
9for string in subjectLINK {
10 if string.contains("nagasaki") {
11 // 条件を満たす文字列だけを結果に含める
12 result.append(name)
13 }
14}
また、配列の各要素が条件を満たすかをチェックする処理は、filter(_:)
メソッドを使うと以下のように簡潔に記述することもできます。
swift
1let result = subjectLINK.filter({ $0.contains("nagasaki") })