質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

907閲覧

あああああああああああああああああああああああ

rararara

総合スコア11

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/11/09 15:48

編集2021/11/13 05:24

あああああああああああああああああああああああああああああああああああああ

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/11/09 20:47

クラス定義だけ貼られても何をしたいのかよく分かりませんが、検索したい文字列がオブジェクトのプロパティのどれかに含まれる、という条件を書きたいのであれば、各プロパティをそれぞれ調べるコードを書く必要があるかと…。
rararara

2021/11/10 03:20

その書き方が分からないので教えて下さい。例でも構いません。
hoshi-takanori

2021/11/10 03:41

問題文をよく見たら、var food: String (食品名?) だけチェックすればいいんですね。失礼しました。 確認ですが、foodArray は FoodData の配列で、それらを全部 UITableView とかに表示するプログラムはできていて、検索欄に何か入力されたらその文字を含む FoodData だけを表示するようにしたいってことでしょうか? (できれば現状のコードをお示しいただけると答えやすいのですが…。)
rararara

2021/11/10 03:46

はい。hoshiさんがおっしゃる通りです。 FoodDataクラスからString型のfoodを取ってきて、searchBar.text(検索バー)とfoodを比較して、同値だったらという条件を作成したいです。私は、そのやり方が分からなかったので、self.foodArray.contains(searchBar.text!) == falseという書き方になっており、エラーが出ています。
guest

回答1

0

ベストアンサー

配列クラスの contains(_:) メソッドでは、パラメータで指定されたオブジェクトと等しいものが配列の要素の中にあるかを調べます。
そのため、 FoodData の配列に対して contains(_:) を呼び出す場合には、パラメータには文字列( String オブジェクト)ではなく FoodData オブジェクトを指定することが期待されます。
これが今回のビルドエラーの原因です。

また、参考までに書きますが、 FoodData オブジェクトの food プロパティの値が指定文字列と一致することを検索条件とするならば、 contains(where:)filter(_:) を使うのがよさそうに思います。

swift

1let keyword = searchBar.text! 2 3// 条件を満たす要素が存在するかを一度に確認する 4if self.foodArray.contains(where: { $0.food == keyword }) == false { 5 // (検索で1件もヒットしなかった場合の処理をここに書く) 6} 7 8// 条件を満たす要素の配列を取得してから、その配列が空かどうかを確認する 9if self.foodArray.filter({ $0.food == keyword }).isEmpty { 10 // (検索で1件もヒットしなかった場合の処理をここに書く) 11}

なお、food プロパティの値が指定文字列と一致するのではなく、指定文字列を含むことを検索条件とするならば、以下のようになります。

swift

1let keyword = searchBar.text! 2 3if self.foodArray.contains(where: { $0.food.contains(keyword) }) == false { 4 // (検索で1件もヒットしなかった場合の処理をここに書く) 5} 6 7if self.foodArray.filter({ $0.food.contains(keyword) }).isEmpty { 8 // (検索で1件もヒットしなかった場合の処理をここに書く) 9}

投稿2021/11/10 21:43

__k_san__

総合スコア177

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rararara

2021/11/11 07:28 編集

想定内の処理を実装することが出来ました! 本当にありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問