我已经创建了一个String类型的枚举。它有两种初始化方法。一个是带有rawValue的默认init方法,另一个是带有intValue的自定义init方法。我是这样写的。有什么简单的方法可以不使用两个开关盒?
enum Roman: String {
case I,V,X,L,C,D,M
var intValue: Int {
switch self {
case .I:
return 1
//...
}
}
init?(intValue: Int) {
switch intValue {
case 1:
self = .I
//...
default:
return nil
}
}
}
//Roman to Int
let number = "XXI".reversed()
.map { Roman(rawValue: String($0))?.intValue ?? 0 }
.reduce((total: 0, max: 0)) { result, value in
let newTotal = result.total + (value < result.max ? -value : value)
return (newTotal, max(result.max, value))
}.total
Run Code Online (Sandbox Code Playgroud)