swift – 从没有switch / case的枚举中获取相关值

我有一些枚举,其中包含几种不同类型的不同类型,例如:
enum X {
    case AsInt(Int)
    case AsDouble(Double)
}

我可以打开这些就可以了解基础价值.但是,switch语句非常烦人,试图让我为其他我不关心的情况执行一些代码.例如,现在我有类似的东西

func AsInt(x: X) -> Int? {
    switch x {
    case AsInt(let num):
        return num;
    default:
        return nil;
    }
}

这是有效的,但总是不得不引用这种方法并且必须为每个枚举的每个案例编写一个方法,这非常繁琐.我正在寻找的是如何简单地尝试将类型X的值转换为其中一个案例,例如

var object: X = func();
let value = obj as? Int;
if value {
    // do shit
}

我怎样才能简单地检查案例而不必枚举我不关心的所有案例并为他们执行一些非陈述?

任何可以将值声明为条件的一部分而不是污染范围的解决方案的加分点.

实际上有多种方法可以做到这一点.

让我们通过使用计算属性扩展你的枚举:

enum X {
    case asInt(Int)
    case asDouble(Double)

    var asInt: Int? {
        // ... see below
    }
}

解决方案如果情况

通过让外面:

var asInt: Int? {
    if case let .asInt(value) = self {
        return value
    }
    return nil
}

通过让内部:

var asInt: Int? {
    if case .asInt(let value) = self {
        return value
    }
    return nil
}

带保护套的解决方

通过让外面:

var asInt: Int? {
    guard case let .asInt(value) = self else {
        return nil
    }
    return value
}

通过让内部:

var asInt: Int? {
    guard case .asInt(let value) = self else {
        return nil
    }
    return value
}

最后一个是我个人最喜欢的四种解决方案的语法.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...