作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一个 Int 枚举,它也可以被“序列化”为 Int 或 String。
enum Fruits : Int {
case Banana = 1
case Apple = 123
}
let favorite = Frutis(fromRaw: 1)
let banana = Fruits(from: "Banana")
assert(favorite==banana)
assert(favorite.rawValue == 1)
assert(String(describing: favorite) == "Banana")
如果不为所有情况自己实现 init(fromRaw:) 和 init(from:),我怎么能做到这一点?枚举包含许多条目,我想避免臃肿的代码。
最佳答案
我从支持所有转换的链接答案中将其放在一起。
enum Fruits : Int, CaseIterable {
case banana = 1
case apple = 123
init?<S: StringProtocol>(_ string: S) {
guard let value = Fruits.allCases.first(where: { "\($0)" == string }) else {
return nil
}
self = value
}
var stringRepresentation: String {
return "\(self)"
}
}
let favorite = Fruits(rawValue: 123)!
let apple = Fruits("apple")!
assert(favorite == apple)
assert(favorite.rawValue == 123)
assert(String(describing: favorite) == "apple")
关于swift - 具有 String 表示形式的 Int 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55519949/
我是一名优秀的程序员,十分优秀!