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

Swift枚举关联值问题:changeAccountConfirmDialog需Author参数报错及实现咨询

Swift枚举带关联值时的属性实现方案

原代码与问题

原枚举代码如下:

internal enum PlayBroadcasterDialogLiveType: Equatable {
    case error
    case exit
    case liveOnOtherDevice
    case stopped
    case paused
    case freezed
    case reconnected
    case disconnected
    case liveIsModerate
    case changeAccountConfirmDialog(Author)

    internal var shouldExitToLiveReport: Bool {
        return self != .liveOnOtherDevice && self != .disconnected && self != .error 
        && !isLiveModerate && self != .freezed && self != .changeAccountConfirmDialog
    }
}

报错原因:changeAccountConfirmDialog是带关联值的枚举case,直接用self != .changeAccountConfirmDialog会触发编译错误——该case必须传入Author类型参数,无法直接进行无参数的相等性判断。

解决方案

方案一:使用Switch语句(推荐,可读性更高)

通过switch枚举所有case,明确列出不需要触发退出的场景,其余场景返回true:

internal enum PlayBroadcasterDialogLiveType: Equatable {
    // 保持原有case定义不变
    case error
    case exit
    case liveOnOtherDevice
    case stopped
    case paused
    case freezed
    case reconnected
    case disconnected
    case liveIsModerate
    case changeAccountConfirmDialog(Author)

    internal var shouldExitToLiveReport: Bool {
        switch self {
        // 所有不需要退出到直播报告的case
        case .liveOnOtherDevice, .disconnected, .error, .freezed, .liveIsModerate, .changeAccountConfirmDialog:
            return false
        // 其余case均返回true
        default:
            return true
        }
    }
}

方案二:使用模式匹配修改原条件判断

在原条件逻辑中,用case .changeAccountConfirmDialog(_)匹配任意关联值的该case,同时统一liveIsModerate的判断方式:

internal var shouldExitToLiveReport: Bool {
    return self != .liveOnOtherDevice 
        && self != .disconnected 
        && self != .error 
        && self != .liveIsModerate 
        && self != .freezed 
        && !(case .changeAccountConfirmDialog(_) = self)
}

说明

  • Switch方案更适合枚举case较多的场景,逻辑清晰,后期维护成本更低。
  • 模式匹配方案可以保留原有代码的条件结构,但可读性稍弱,适合需要维持原有代码风格的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:55:19