好吧,老实说,我不喜欢在访问rawValue值时调用enum
我几乎一直都这样使用enum,我认为调用.rawValue会使我的代码不那么“可读”:

enum FontSize: CGFloat {
    case Small = 12
    case Normal = 15
    case Large = 18
}
enum Example: String {
    case First = "First"
    case Second = "Second"
}

因此,我试图为enum定义一个通用运算符,以“覆盖” .rawValue。我通常可以做到。
postfix operator .. { }

postfix func .. (lhs: Example) -> String {
    return lhs.rawValue
}

postfix func .. (lhs: FontSize) -> CGFloat {
    return lhs.rawValue
}

但是,我很懒,我想要一个通用的解决方案。写一个,全力以赴。

有人可以帮我吗?谢谢。

更新:如果您想增加/减少enum的功能,例如上面的FontSize,对对此问题有兴趣的人。使用这些:
postfix func ++ <T: RawRepresentable, V: FloatingPointType>(lhs: T) -> V {
    return (lhs.rawValue as! V) + 1
}

postfix func -- <T: RawRepresentable, V: FloatingPointType>(lhs: T) -> V {
    return (lhs.rawValue as! V) - 1
}

postfix func ++ <T: RawRepresentable, V: IntegerType>(lhs: T) -> V {
    return (lhs.rawValue as! V) + 1
}

postfix func -- <T: RawRepresentable, V: IntegerType>(lhs: T) -> V {
    return (lhs.rawValue as! V) - 1
}

Gist for future reference here

最佳答案

嘿,你真的很懒! ;-)

postfix operator .. { }

postfix func ..<T: RawRepresentable> (lhs: T) -> T.RawValue {
    return lhs.rawValue
}

有一个协议:-)

无论如何,请注意不要引入太多深奥的自定义运算符;-)

关于ios - 用自定义运算符替换枚举的rawValue属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29181242/

10-10 21:02