You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:03:16