首页 > 解决方案 > Swift枚举关联值作为函数参数

问题描述

我试图弄清楚(如果可能的话)如何将枚举的关联值传递给函数,然后切换类型以执行某些特定代码。

这在操场上有效:

struct Bar {}
struct Baz {}

enum Test {
    case foo
    case bar(value: Bar)
    case baz(value: Baz)
}

func doSomething(value: Test) {
    switch value {
        case .foo: print("foo")
        case .bar: print("bar")
        case .baz: print("baz")
    }
}

let bar = Bar()
doSomething(value: .bar(value: bar)) // prints "bar"
doSomething(value: .foo) // prints "foo"

但是是否可以直接将关联值作为参数传递?像这样的东西:

let bar = Bar()
doSomething(value: bar)

这当然会失败,因为BarTest.

我怎么能那样做?

编辑

为了澄清起见,我目前正在使用重载,但想看看我是否可以拥有一个中央公共方法,然后根据关联值的类型分派给私有方法。

标签: swiftenums

解决方案


只提供重载功能

func doSomething(value: Bar) {
    print("bar")
}

doSomething(value: bar) // now works !!

推荐阅读