原因はわかったような気がしますが、解決方法はこれから考えるところです。
追記のところをご覧ください。(この2行も追記です)25日15時
あれからいろいろと確認していますが、関数としてジャンケンの判定と勝敗、引分けのカウント部分とその呼び出しに対して発生するエラー解消ができていません。
var body: some View { 直下の VStack { の行に
Type '()' cannot conform to 'View' というエラーが出ています。
エラーはこれだけです。
関数は引数2個、戻り値なしで判定とカウントをしています。
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文になってしまいました。
Buttonを実装したところの後ろでこの関数を呼び出しています。
judge(My: MyAnswerNumber, You: YourAnswerNumber) ← 一番怪しい
MyAnswerNumberの値をMyに、YourAnswerNumberの値をYouに入れて
judge という関数を呼び出しています。
MyとYouの値は1〜3でそれぞれ、グー、チョキ、パーを表しています。
My == 1 && You == 2 はわたしがグーで、あなたがチョキの場合は
WinCountを+1してわたしの勝ちの回数をカウントアップしています。
試しに、関数を呼び出す部分 judge(.........) をコメントアウトしたところ
エラーは消えました。当然ですが、カウントはできません。
関数を呼び出すところに問題があるようです。
再確認の意味で、関数を使わずに if文を1個だけ、関数を呼び出していた部分をコメントアウトしたあとに入れてみたら、その箇所に同じエラーが出ました。
ということはif文の書き方に問題がありそうです。
追記 12月25日15:00
if文ではなく、条件を満たした時に実行する部分が問題のようです。
Viewの部分は状態変数が更新されると再描画されることがヒントになりました。
つまり、if文の条件を満たした場合にはカウンターでカウントアップするようになっています。そうすると条件を満たした状態で何度も再描画された場合にはカウンターが二重三重にカウントされることがあるのではないかということです。
試しに WinCount += 1 のようにカウントする部分の行をコメントアウトしたらエラーが消えました。
エラーが消えたのはいいことなのですが、どうやってカウントアップするかが次の課題となりました。
次の本は、Xcode 14、iOS 16、Swift 5.7 に対応しています。
