我有一个泛型类型的包装器,它允许您将值注释为"绝对值"或"亲戚":
enum Value<Wrapped> {
case .absolute(Wrapped)
case .relative(Wrapped)
}
func printValue(_ value: Value<Int>) {
switch value {
case .absolute(let value): print(value)
case .relative(let value): print(value + 10)
}
}
printValue(.absolute(5)) //5
printValue(.relative(5)) //15
有没有以这样的方式定义Value<Wrapped>
,你可以直接分配Wrapped
的实例,它会推断出正确的情况?例如:
printValue(5) //5
printValue(.relative(5)) //15
Swift Optionals似乎这样做:
func printValue(_ value: Optional<Int>) {
switch value {
case .none: print("nil")
case .some(let value): print(value)
}
}
printValue(5) //5
我能在枚举中实现同样的行为吗?或者Optional
是通过编译魔术来实现的吗?
答案 0 :(得分:0)
AFAIK,Optional
有特殊的语言支持。您仍然可以调用另一个printValue
重载。
func printValue(_ value: Int) {
printValue(.absolute(value))
}