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

Swift中Switch语句返回String报错:缺失返回值问题求助

解决Swift中"Missing return in a function expected to return 'String'"的问题

嘿,我帮你揪出问题啦!你遇到的这个编译错误,核心原因是你的代码没有覆盖所有可能的执行分支,Swift编译器对返回值的检查非常严格,必须确保每一条路径都能返回指定类型的值。

先看你代码里的明显问题:

  1. 在case .paper的内部switch里,你只写了case .roc...——这明显是case .rock没写完,后续的.paper、.scissors分支都没处理;
  2. 外层的switch直接漏掉了case .scissors的整个分支,编译器完全不知道当玩家出.scissors时要返回什么。

哪怕你觉得“所有分支都设置了返回值”,但只要有一个枚举case没被覆盖,编译器就会判定存在无法返回值的路径,抛出错误。

给你优化后的完整代码(推荐写法)

其实不需要嵌套switch,Swift支持用元组同时匹配玩家和机器人的出拳,代码更简洁还不容易漏分支:

enum Sign { 
    case rock, paper, scissors 
}

func detectWinner(player: Sign, bot: Sign) -> String {
    switch (player, bot) {
    // 所有平局的情况
    case (.rock, .rock), (.paper, .paper), (.scissors, .scissors):
        return "You Tied"
    // 所有玩家获胜的情况
    case (.rock, .scissors), (.paper, .rock), (.scissors, .paper):
        return "You Won"
    // 剩下的所有情况都是玩家输
    default:
        return "You Lost"
    }
}

如果你不想用default,也可以把所有输的情况列出来:

这种写法会让编译器自动验证是否覆盖了所有可能的组合,完全不会再出现返回值缺失的错误:

func detectWinner(player: Sign, bot: Sign) -> String {
    switch (player, bot) {
    case (.rock, .rock), (.paper, .paper), (.scissors, .scissors):
        return "You Tied"
    case (.rock, .scissors), (.paper, .rock), (.scissors, .paper):
        return "You Won"
    case (.rock, .paper), (.paper, .scissors), (.scissors, .rock):
        return "You Lost"
    }
}

再回头看你的原写法(如果坚持嵌套switch)

要是你想保留嵌套switch的结构,必须把所有分支都补全,比如:

func detectWinner(player: Sign, bot: Sign) -> String{
    switch player{
    case .rock:
        switch bot{
        case .rock: return "You Tied"
        case .paper: return "You Lost"
        case .scissors: return "You Won"
        }
    case .paper:
        switch bot{
        case .rock: return "You Won"
        case .paper: return "You Tied"
        case .scissors: return "You Lost"
        }
    case .scissors:
        switch bot{
        case .rock: return "You Lost"
        case .paper: return "You Won"
        case .scissors: return "You Tied"
        }
    }
}

这样每个嵌套switch都覆盖了bot的所有case,外层switch也覆盖了player的所有case,编译器就不会再报错啦。

内容的提问来源于stack exchange,提问作者randomnessthatsfunny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:24:36