用自定义运算符替换enum的rawValue属性

时间:2015-03-21 09:41:42

标签: ios swift

嗯,说实话,我不想在访问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

1 个答案:

答案 0 :(得分:5)

嘿,伙计,你真的很懒! ; - )

postfix operator .. { }

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

有一个协议: - )

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