当我已经知道要获取关联值的枚举CASE语句的情况时,有比使用Switch语句提取关联值更简单的方法吗?

如果必须想出一条Switch语句、提供多个Case,或者只提取关联值的默认Case,那就太花哨了.

enum CircularReasoning {
    case justPi(pi: Double)
    case pizzaPie(howMany: Int)
}

var piInTheSky : Double 

let whatLogic = CircularReasoning(pi: 3.1415926)

⬇️ ???????????????? ???????? ???????????????????? ⬇️ 

switch whatLogic {
    case .justPi(let pi):
        piInTheSky = pi!
    default:
        break
}

推荐答案

你可以像在TylerP的例子中那样使用if case .<enum_case>(let value), 或if case let .<enum_case>(value):

enum Foo {
    case anInt(Int)
    case aFloat(Float)
}

let aFoo: Foo = .anInt(9)

// Example of `if case .<enum_case)(let value)` syntax:
if case .anInt(let aValue) = aFoo {
    print("aFoo = anInt(\(aValue))")

// Example of `if case let .enum_case(value)` syntax:
} else if case let .aFloat(aValue) = aFoo {
    print("aFoo = aFloat(\(aValue))")
}

两者都奏效了.我不确定为什么这门语言包括这两种变体.

如果您只关心一种枚举类型,那么对我来说,任何一种if语法都是有意义的.如果您要处理多个可能的枚举值,那么Switch版本似乎更简洁.

Swift相关问答推荐

为什么在Swift属性Wrapper中需要类型注释?

map 视图上的SwiftUI渐变折线

MyApp类型不符合协议App''''

如何让ScrollView缩小到合适的大小,并在没有黑客攻击的情况下占用最小空间

一种函数,用于判断变量的类型是否为在SWIFT中作为参数传递的类型

从SwiftUI使用UIPageView时,同一页面连续显示两次的问题

如何在visionOS中将模型锚定在用户头部上方?

Xcode 15 Beta中如何使用@Observable?

如何在闭包中使用构造 await sync

如何延迟 swift 属性 didSet 使其每秒只触发一次

P384 公钥获取IncorrectParameterSize

不要从 NumberFormatter 获取货币符号

在 xcode 13 中的构建之间保持可访问性权限

如何在不阻塞 UI 更新的情况下使用 Swift Concurrency 在后台执行 CPU 密集型任务?

如何使被拖动的对象成为前景(foreground)对象

iOS:检测设备是否为 iPhone X 系列(无框)

快速覆盖属性

Swift - 迭代 struct 对象时如何对其进行变异

用 UIBezierPath 画一条线

UITableView 布局在 push segue 和 return 上搞砸了. (iOS 8、Xcode beta 5、Swift)