SwiftUI开发石头剪刀布游戏遇警告:'((), ())'表达式未使用,如何修复?
解决SwiftUI中「Expression of type '((), ())' is unused」警告问题
这个警告的核心原因是你的switch语句的case块里,用逗号分隔了多个表达式,Swift把这些表达式解析成了一个未被使用的元组(((), ())表示两个无返回值操作组成的元组)。比如类似(playerChoice = .scissors, score += 1)这种写法,就会触发警告。
快速修复方案
把case里的多个操作拆成独立的语句,去掉逗号,用换行分隔:
// 优化前(触发警告) if goal == .win { switch systemChoice { case .rock: (playerChoice = .paper, score += 1) // 其他case... } } // 优化后(消除警告) if goal == .win { switch systemChoice { case .rock: playerChoice = .paper score += 1 case .paper: playerChoice = .scissors score += 1 case .scissors: playerChoice = .rock score += 1 } } else { switch systemChoice { case .rock: playerChoice = .scissors score += 1 case .paper: playerChoice = .rock score += 1 case .scissors: playerChoice = .paper score += 1 } }
进一步优化逻辑(减少嵌套更简洁)
你可以用字典映射替代嵌套的if-switch结构,让代码更清晰,从根源避免这类语法问题:
首先定义枚举和映射关系:
enum GameChoice: String { case rock, paper, scissors } enum GameGoal { case win, lose } // 赢的情况下,玩家需要出的选择映射 private let winChoices: [GameChoice: GameChoice] = [ .rock: .paper, .paper: .scissors, .scissors: .rock ] // 输的情况下,玩家需要出的选择映射 private let loseChoices: [GameChoice: GameChoice] = [ .rock: .scissors, .paper: .rock, .scissors: .paper ]
然后在判断时直接调用映射:
// 根据目标获取正确选择 let correctChoice = goal == .win ? winChoices[systemChoice]! : loseChoices[systemChoice]! // 后续处理(比如判断玩家选择是否正确、更新分数) if playerChoice == correctChoice { score += 1 // 其他成功逻辑 } else { // 失败逻辑 }
这种写法不仅消除了警告,还让逻辑更直观,减少了嵌套代码的维护成本。
内容的提问来源于stack exchange,提问作者user17852191
相关产品推荐
相关产品推荐

