2 // EnhancementListItem.swift
5 // Created by Hori,Masaki on 2017/01/25.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 final class EnhancementListItem: NSObject, NSCoding, NSCopying {
13 let identifier: String
15 let equipmentType: EquipmentType
16 let targetEquipment: String
17 let remodelEquipment: String?
18 let requiredEquipments: RequiredEquipmentSet
19 let secondsShipNames: [String]
21 init(identifier: String,
23 equipmentType: EquipmentType,
24 targetEquipment: String,
25 remodelEquipment: String?,
26 requiredEquipments: RequiredEquipmentSet,
27 secondsShipNames: [String]) {
29 self.identifier = identifier
30 self.weekday = weekday
31 self.equipmentType = equipmentType
32 self.targetEquipment = targetEquipment
33 self.remodelEquipment = remodelEquipment
34 self.requiredEquipments = requiredEquipments
35 self.secondsShipNames = secondsShipNames
40 func replace(identifier: String? = nil,
42 equipmentType: EquipmentType? = nil,
43 targetEquipment: String? = nil,
44 remodelEquipment: String? = nil,
45 requiredEquipments: RequiredEquipmentSet? = nil,
46 secondsShipNames: [String]? = nil) -> EnhancementListItem {
48 return EnhancementListItem(identifier: identifier ?? self.identifier,
49 weekday: weekday ?? self.weekday,
50 equipmentType: equipmentType ?? self.equipmentType,
51 targetEquipment: targetEquipment ?? self.targetEquipment,
52 remodelEquipment: remodelEquipment ?? self.remodelEquipment,
53 requiredEquipments: requiredEquipments ?? self.requiredEquipments,
54 secondsShipNames: secondsShipNames ?? self.secondsShipNames)
59 static let identifier = "EnhancementListItemIdentifier"
60 static let weekday = "weekday"
61 static let equipmentType = "equipmentType"
62 static let targetEquipment = "targetEquipment"
63 static let remodelEquipment = "remodelEquipment"
64 static let requiredEquipments = "requiredEquipments"
65 static let secondsShipNames = "secondsShipNames"
68 required convenience init?(coder aDecoder: NSCoder) {
70 guard let i = aDecoder.decodeObject(forKey: CodeKey.identifier) as? String,
71 let e = EquipmentType(rawValue: aDecoder.decodeInteger(forKey: CodeKey.equipmentType)),
72 let t = aDecoder.decodeObject(forKey: CodeKey.targetEquipment) as? String,
73 let req = aDecoder.decodeObject(forKey: CodeKey.requiredEquipments) as? RequiredEquipmentSet,
74 let s = aDecoder.decodeObject(forKey: CodeKey.secondsShipNames) as? [String] else {
76 Logger.shared.log("Can not decode EnhancementListItem")
80 let w = aDecoder.decodeInteger(forKey: CodeKey.weekday)
81 let rem = aDecoder.decodeObject(forKey: CodeKey.remodelEquipment) as? String
83 self.init(identifier: i,
87 remodelEquipment: rem,
88 requiredEquipments: req,
92 func encode(with aCoder: NSCoder) {
94 aCoder.encode(identifier, forKey: CodeKey.identifier)
95 aCoder.encode(weekday, forKey: CodeKey.weekday)
96 aCoder.encode(equipmentType.rawValue, forKey: CodeKey.equipmentType)
97 aCoder.encode(targetEquipment, forKey: CodeKey.targetEquipment)
98 aCoder.encode(remodelEquipment, forKey: CodeKey.remodelEquipment)
99 aCoder.encode(requiredEquipments, forKey: CodeKey.requiredEquipments)
100 aCoder.encode(secondsShipNames, forKey: CodeKey.secondsShipNames)
103 func copy(with zone: NSZone? = nil) -> Any {
105 return EnhancementListItem(identifier: identifier,
107 equipmentType: equipmentType,
108 targetEquipment: targetEquipment,
109 remodelEquipment: remodelEquipment,
110 requiredEquipments: requiredEquipments,
111 secondsShipNames: secondsShipNames)
115 final class RequiredEquipmentSet: NSObject, NSCoding, NSCopying {
117 let identifier: String
118 let requiredEquipments: [RequiredEquipment]
120 init(identifier: String, requiredEquipments: [RequiredEquipment]) {
122 self.identifier = identifier
123 self.requiredEquipments = requiredEquipments
130 static let identifier = "RequiredEquipmentSetIdentifier"
131 static let requiredEquipments = "requiredEquipments"
134 required convenience init?(coder aDecoder: NSCoder) {
136 guard let i = aDecoder.decodeObject(forKey: CodeKey.identifier) as? String,
137 let r = aDecoder.decodeObject(forKey: CodeKey.requiredEquipments) as? [RequiredEquipment] else {
139 Logger.shared.log("Can not decode RequiredEquipmentSet")
143 self.init(identifier: i, requiredEquipments: r)
146 func encode(with aCoder: NSCoder) {
148 aCoder.encode(identifier, forKey: CodeKey.identifier)
149 aCoder.encode(requiredEquipments, forKey: CodeKey.requiredEquipments)
152 func copy(with zone: NSZone? = nil) -> Any {
154 return RequiredEquipmentSet(identifier: identifier,
155 requiredEquipments: requiredEquipments)
159 final class RequiredEquipment: NSObject, NSCoding, NSCopying {
161 let identifier: String
162 let currentLevelString: String
163 @objc let name: String
168 init(identifier: String, levelRange: String, name: String, number: Int, screw: Int, ensureScrew: Int) {
170 self.identifier = identifier
171 self.currentLevelString = levelRange
175 self.ensureScrew = ensureScrew
180 // MARK: - NSCoding, NSCopying
183 static let identifier = "RequiredEquipmentIdentifier"
184 static let currentLevelString = "currentLevelString"
185 static let name = "name"
186 static let number = "number"
187 static let screw = "screw"
188 static let ensureScrew = "ensureScrew"
191 required convenience init?(coder aDecoder: NSCoder) {
193 guard let i = aDecoder.decodeObject(forKey: CodeKey.identifier) as? String,
194 let c = aDecoder.decodeObject(forKey: CodeKey.currentLevelString) as? String,
195 let na = aDecoder.decodeObject(forKey: CodeKey.name) as? String else {
197 Logger.shared.log("Can not decode RequiredEquipment")
201 let nu = aDecoder.decodeInteger(forKey: CodeKey.number)
202 let s = aDecoder.decodeInteger(forKey: CodeKey.screw)
203 let e = aDecoder.decodeInteger(forKey: CodeKey.ensureScrew)
205 self.init(identifier: i, levelRange: c, name: na, number: nu, screw: s, ensureScrew: e)
208 func encode(with aCoder: NSCoder) {
210 aCoder.encode(identifier, forKey: CodeKey.identifier)
211 aCoder.encode(currentLevelString, forKey: CodeKey.currentLevelString)
212 aCoder.encode(name, forKey: CodeKey.name)
213 aCoder.encode(number, forKey: CodeKey.number)
214 aCoder.encode(screw, forKey: CodeKey.screw)
215 aCoder.encode(ensureScrew, forKey: CodeKey.ensureScrew)
218 func copy(with zone: NSZone? = nil) -> Any {
220 return RequiredEquipment(identifier: identifier,
221 levelRange: currentLevelString,
225 ensureScrew: ensureScrew)
229 extension RequiredEquipment {
231 @objc dynamic var numberString: String? {
233 if number == 0 { return nil }
234 if number == -1 { return "-" }