Playground(Apple提供のswift教材)を使用してswiftを学習しています。
Playground教材「19_列挙型とswitch文」における演習問題ニワトリを数えるでつまづいています。
if文であればできるのですが、switchを学習した意味がないので、switchで配列検索したいのですが、種々のエラーに阻まれ解決できませんでした。teratail内及びネット検索した内容では解決しなかったため質問させて頂きます。
1. 質問内容
- 回答はどのようになるか?(Playgroundには回答がありません)
- struct型内のenum型を用いた配列の基本的な呼び出し方
2. 問題(原文まま)
演習問題:ニワトリを数える
このPlaygroundにはChicken型が組み込まれています。Chickenにはbreed(品種)とtemper(性質)のプロパティがあり、どちらもenumです。
ここに、ニワトリの配列があります。
swift
1chickens
ニワトリは卵からかえったばかりなので、安全に数えることができます。
swift
1var chickenOfInterestCount = 0 2for chicken in chickens { 3 chickenOfInterestCount += 1 4} 5chickenOfInterestCount
演習
for…inループの中のコードをアップデートし、.hilarious .leghorn(陽気なレグホン種)のように関心のあるニワトリだけを数えてください。オートコンプリートのポップアップで、各enumが取りうる値を確認してください。
配列
swift
1public enum Breed { 2 case leghorn, rhodeIsland, silkie, plymouthRock 3} 4 5public enum Temper { 6 case friendly, grumpy, hilarious 7} 8 9public struct Chicken { 10 public let breed: Breed 11 public let temper: Temper 12} 13 14public let chickens: [Chicken] = [ 15 Chicken(breed: .leghorn, temper: .friendly), 16 Chicken(breed: .leghorn, temper: .friendly), 17 Chicken(breed: .leghorn, temper: .grumpy), 18 Chicken(breed: .rhodeIsland, temper: .friendly), 19 Chicken(breed: .leghorn, temper: .hilarious), 20 Chicken(breed: .rhodeIsland, temper: .friendly), 21 Chicken(breed: .rhodeIsland, temper: .grumpy), 22 Chicken(breed: .silkie, temper: .friendly), 23 Chicken(breed: .rhodeIsland, temper: .grumpy), 24 Chicken(breed: .silkie, temper: .grumpy), 25 Chicken(breed: .rhodeIsland, temper: .hilarious), 26 Chicken(breed: .leghorn, temper: .friendly), 27 Chicken(breed: .silkie, temper: .friendly), 28 Chicken(breed: .leghorn, temper: .hilarious), 29 Chicken(breed: .plymouthRock, temper: .grumpy), 30 Chicken(breed: .leghorn, temper: .grumpy), 31 Chicken(breed: .silkie, temper: .grumpy), 32 Chicken(breed: .plymouthRock, temper: .friendly), 33 Chicken(breed: .leghorn, temper: .friendly), 34 Chicken(breed: .leghorn, temper: .friendly), 35]
3.自身の回答とエラー
以下のように書きましたが、エラーとなってしまいました。
そのほかにもあれこれ迷走しましたが、設問にforループ内を修正すると記載があるのでシンプルにこの程度でできるはずと想像しております。
swift
1var chickenOfInterestCount = 0 2 3for _ in chickens { 4 switch chickens { 5 case (.leghorn, .hilarious): 6 chickenOfInterestCount += 1 7 default: 8 break 9 } 10} 11chickenOfInterestCount
error
1Tuple pattern cannot match values of the non-tuple type '[Chicken]'
↑このエラー自体は言っていることはわかるのですが、どうやったら解決するのかがわかりませんでした。
よろしくお願いします。
以下、その他試したことを追記
swift
1var chickenOfInterestCount = 0 2 3for chicken in chickens { 4 switch chicken { 5 case (Breed.leghorn, Temper.hilarious) : 6 chickenOfInterestCount += 1 7 default: 8 break 9 } 10} 11chickenOfInterestCount
error
1Enum case 'hilarious' is not a member of type '<<error type>>' 2Enum case 'leghorn' is not a member of type '<<error type>>' 3Tuple pattern cannot match values of the non-tuple type 'Chicken'
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/30 04:46
2019/10/30 06:36
2019/11/07 23:27