今回は、勝敗、引分けの回数を表示しました。
相手とわたしのジャンケンから勝敗、引分けを判定してカウントしていけばいいのですが、その部分はまだ実装していません。
関数を使ってジャンケンの判定を行なっていますが、エラーがたくさん出てきましたね。参考までに関数部分のコードを示しておきます。
位置は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 に対応しています。
