swift - 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)
这当然会失败,因为Bar
与Test
.
我怎么能那样做?
编辑
为了澄清起见,我目前正在使用重载,但想看看我是否可以拥有一个中央公共方法,然后根据关联值的类型分派给私有方法。
解决方案
只提供重载功能
func doSomething(value: Bar) {
print("bar")
}
doSomething(value: bar) // now works !!
推荐阅读
- r - 使用新数据进行零膨胀 GAM 预测
- python - 如何在 Mac 上运行 python 文件?
- xcode - 在 SpriteKit 中使用 PhysicsBodies 时的意外行为
- mysql - 如何在 MySQL 中同时使用 WHERE BETWEEN 和 WHERE?
- php - c9 上的 Laravel Blade 模板仅选择性地扩展到某些页面
- php - PHP - 使用 XAMPP 时出现 $_SERVER('PHP_SELF') 错误
- c# - 检查一个数字是否包含数字 1 到 n 作为因子
- javascript - 使用 JavaScript 代理将值添加到参数
- ios - 通过带有 UDID 的 IPA 分发给客户?
- qt - 如何在 Qt 中创建自定义模块并像 Qt += mymodule 一样使用它?