直接将类型分配给Swift中的Type包装器

时间:2017-07-28 18:39:56

标签: swift

我有一个泛型类型的包装器,它允许您将值注释为"绝对值"或"亲戚":

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是通过编译魔术来实现的吗?

1 个答案:

答案 0 :(得分:0)

AFAIK,Optional有特殊的语言支持。您仍然可以调用另一个printValue重载。

func printValue(_ value: Int) {
    printValue(.absolute(value))
}