我有一个通用类型包装器,它允许您将值注释为“绝对”或“相对”:
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
SwiftOptions 似乎可以做到这一点:
func printValue(_ value: Optional<Int>) {
switch value {
case .none: print("nil")
case .some(let value): print(value)
}
}
printValue(5) //5
我可以在枚举中实现同样的行为吗?或者是Optional
通过编译器魔法实现这一点?
最佳答案
据我所知,可选
具有特殊的语言支持。您仍然可以使用 printValue
重载来调用另一个重载。
func printValue(_ value: Int) {
printValue(.absolute(value))
}
关于swift - 在 Swift 中将类型直接分配给类型包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45380313/