/
UserStructInSteadOfEnum.swift
61 lines (50 loc) · 1.35 KB
/
UserStructInSteadOfEnum.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import Foundation
// The Number of case in enum and its method tends to swell.
// Use struct and static constant instead.
// BEFORE
public enum SushiEnum: String {
case マグロ
case サバ
case サケ
// NOTE: Defined as func because lizard doesn't calcurate CCN in computed property.
public func enName() -> String {
switch self {
case .マグロ:
return "tuna"
case .サバ:
return "mackerel"
case .サケ:
return "salmon"
}
}
public func price() -> Int {
switch self {
case .マグロ:
return 380
case .サバ:
return 270
case .サケ:
return 160
}
}
}
// AFTER
public struct SushiStruct {
public let jaName: String
public let enName: String
public let price: Int
private init(
jaName: String,
enName: String,
price: Int
) {
self.jaName = jaName
self.enName = enName
self.price = price
}
}
extension SushiStruct {
public static let tuna: SushiStruct = .init(jaName: "マグロ", enName: "tuna", price: 380)
public static let mackerel: SushiStruct = .init(jaName: "サバ", enName: "mackerel", price: 270)
public static let salmon: SushiStruct = .init(jaName: "サケ", enName: "salmon", price: 160)
}