swift - 在 Swift 中将类型直接分配给类型包装器

标签 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

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/

相关文章:

swift - 如何同时更新 UICollectionViewCell 的边框并执行 UICollectionView Cells 的批量更新

swift - IOBluetooth 注册 channel 打开通知时 channel 打开时不触发

ios - UITableView 滚动到单元格的顶部

ios - TextView 中的按钮

ios - AlamoFire 无线程警告

regex - 仅匹配未转义字符的正则表达式

ios - SKScene,检测到 2 个 SKSpriteNode 何时在彼此的 x 范围内?

Swift 3 - 原子 boolean 值

ios - 应用程序在后台时来自 iOS 推送通知操作的 Http 请求

ios - 使用日期作为保存到 plist 的字典中的键