今回は、勝敗、引分けの回数を表示しました。

相手とわたしのジャンケンから勝敗、引分けを判定してカウントしていけばいいのですが、その部分はまだ実装していません。

 

 

関数を使ってジャンケンの判定を行なっていますが、エラーがたくさん出てきましたね。参考までに関数部分のコードを示しておきます。

位置はVStackを出たところに書いています。<-- var body: ....を出たところに移動したら関数のエラーは消えました。 

                赤字の部分が追記の部分です。(24日18時)

 

しかし、あらたにvar body:....  直下のVStackのところに

 

Type '()' cannot conform to 'View' という新たなエラーが出てきました。

残りのエラーはこれだけです。

 

それから関数で判定だけのつもりでしたが、カウントまでしています。

 

 func judge(My: Int, You: Int) {   <- ここでエラー発生

            if My == 1 && You == 2 {

                WinCount += 1

            } else if My == 2 && You == 3 {

                WinCount += 1

            } else if My == 3 && You == 1 {

                WinCount += 1

            } else if My == 1 && You == 3 {

                LoseCount += 1

            } else if My == 2 && You == 1 {

                LoseCount += 1

            } else if My == 3 && You == 2 {

                LoseCount += 1

            } else {

                TieCount += 1

            }

   }

 

長いif文になっていますが、最初はand文をorで繋いで長い条件文を書いていたのですが、たくさんエラーが出たので切り分けながらエラーが減るかの確認をしたので長いif-else文になってしまいました。

 

エラー解消したのはカウントの変数を型宣言の部分で@Stateをつけたことでエラーの数は半減しました。

 

Buttonを実装したところの後ろでこの関数を呼び出しています。

 

 judge(My: MyAnswerNumber, You: YourAnswerNumber)

 

エラーが出ている箇所は関数を宣言している部分です。

 

Closure containing a declaration cannot be used with result builder 'ViewBuilder'

 

日本語に訳すと

宣言を含むクロージャは結果ビルダ'ViewBuilder'で使用できない。

 

ということらしいです。

 

MyとYouの値は1〜3でそれぞれ、グー、チョキ、パーを表しています。

 

My == 1 && You == 2 はわたしがグーで、あなたがチョキの場合は

WinCountを+1してわたしの勝ちの回数をカウントアップしています。

 

いろいろ調べましたが、わかりません。MyとYouを念のために@Stateで宣言してみましたが、エラーに変化はありませんでした。

 

今のところつまづいたままです。少し休憩して頭を冷やして考えます。

 

 

  次の本は、Xcode 14、iOS 16、Swift 5.7 に対応しています。