@@ -94,25 +94,31 @@ public final class KeyCombo: NSObject, NSCopying, NSCoding, Codable {
9494 // MARK: - NSCoding
9595 public init ? ( coder aDecoder: NSCoder ) {
9696 self . doubledModifiers = aDecoder. decodeBool ( forKey: CodingKeys . doubledModifiers. rawValue)
97- if doubledModifiers {
97+ self . modifiers = aDecoder. decodeInteger ( forKey: CodingKeys . modifiers. rawValue)
98+ guard !doubledModifiers else {
9899 self . key = . a
99- } else {
100- // Changed KeyCode to QWERTYKeyCode from v3.0.0
101- let containsKeyCode = aDecoder. containsValue ( forKey: CodingKeys . keyCode. rawValue)
102- let QWERTYKeyCode : Int
103- if containsKeyCode {
104- QWERTYKeyCode = aDecoder. decodeInteger ( forKey: CodingKeys . keyCode. rawValue)
105- } else {
106- QWERTYKeyCode = aDecoder. decodeInteger ( forKey: CodingKeys . QWERTYKeyCode. rawValue)
107- }
108- guard let key = Key ( QWERTYKeyCode: QWERTYKeyCode) else { return nil }
100+ return
101+ }
102+ // Changed KeyCode to Key from v3.2.0
103+ guard !aDecoder. containsValue ( forKey: CodingKeys . key. rawValue) else {
104+ guard let keyRawValue = aDecoder. decodeObject ( forKey: CodingKeys . key. rawValue) as? String else { return nil }
105+ guard let key = Key ( rawValue: keyRawValue) else { return nil }
109106 self . key = key
107+ return
110108 }
111- self . modifiers = aDecoder. decodeInteger ( forKey: CodingKeys . modifiers. rawValue)
109+ // Changed KeyCode to QWERTYKeyCode from v3.0.0
110+ let QWERTYKeyCode : Int
111+ if aDecoder. containsValue ( forKey: CodingKeys . keyCode. rawValue) {
112+ QWERTYKeyCode = aDecoder. decodeInteger ( forKey: CodingKeys . keyCode. rawValue)
113+ } else {
114+ QWERTYKeyCode = aDecoder. decodeInteger ( forKey: CodingKeys . QWERTYKeyCode. rawValue)
115+ }
116+ guard let key = Key ( QWERTYKeyCode: QWERTYKeyCode) else { return nil }
117+ self . key = key
112118 }
113119
114120 public func encode( with aCoder: NSCoder ) {
115- aCoder. encode ( QWERTYKeyCode , forKey: CodingKeys . QWERTYKeyCode . rawValue)
121+ aCoder. encode ( key . rawValue , forKey: CodingKeys . key . rawValue)
116122 aCoder. encode ( modifiers, forKey: CodingKeys . modifiers. rawValue)
117123 aCoder. encode ( doubledModifiers, forKey: CodingKeys . doubledModifiers. rawValue)
118124 }
@@ -121,33 +127,37 @@ public final class KeyCombo: NSObject, NSCopying, NSCoding, Codable {
121127 public init ( from decoder: Decoder ) throws {
122128 let container = try decoder. container ( keyedBy: CodingKeys . self)
123129 self . doubledModifiers = try container. decode ( Bool . self, forKey: . doubledModifiers)
124- if doubledModifiers {
130+ self . modifiers = try container. decode ( Int . self, forKey: . modifiers)
131+ guard !doubledModifiers else {
125132 self . key = . a
133+ return
134+ }
135+ // Changed KeyCode to Key from v3.2.0
136+ guard !container. contains ( . key) else {
137+ self . key = try container. decode ( Key . self, forKey: . key)
138+ return
139+ }
140+ // Changed KeyCode to QWERTYKeyCode from v3.0.0
141+ let QWERTYKeyCode : Int
142+ if container. contains ( . keyCode) {
143+ QWERTYKeyCode = try container. decode ( Int . self, forKey: . keyCode)
126144 } else {
127- let QWERTYKeyCode : Int
128- if container. contains ( . keyCode) {
129- // Changed KeyCode to QWERTYKeyCode from v3.0.0
130- QWERTYKeyCode = try container. decode ( Int . self, forKey: . keyCode)
131- } else {
132- QWERTYKeyCode = try container. decode ( Int . self, forKey: . QWERTYKeyCode)
133- }
134- guard let key = Key ( QWERTYKeyCode: QWERTYKeyCode) else {
135- throw KeyCombo . InitializeError ( )
136- }
137- self . key = key
145+ QWERTYKeyCode = try container. decode ( Int . self, forKey: . QWERTYKeyCode)
138146 }
139- self . modifiers = try container. decode ( Int . self, forKey: . modifiers)
147+ guard let key = Key ( QWERTYKeyCode: QWERTYKeyCode) else { throw KeyCombo . InitializeError ( ) }
148+ self . key = key
140149 }
141150
142151 public func encode( to encoder: Encoder ) throws {
143152 var container = encoder. container ( keyedBy: CodingKeys . self)
144- try container. encode ( QWERTYKeyCode , forKey: . QWERTYKeyCode )
153+ try container. encode ( key , forKey: . key )
145154 try container. encode ( modifiers, forKey: . modifiers)
146155 try container. encode ( doubledModifiers, forKey: . doubledModifiers)
147156 }
148157
149158 // MARK: - Coding Keys
150159 private enum CodingKeys : String , CodingKey {
160+ case key
151161 case keyCode
152162 case QWERTYKeyCode
153163 case modifiers
@@ -157,9 +167,9 @@ public final class KeyCombo: NSObject, NSCopying, NSCoding, Codable {
157167 // MARK: - Equatable
158168 public override func isEqual( _ object: Any ? ) -> Bool {
159169 guard let keyCombo = object as? KeyCombo else { return false }
160- return QWERTYKeyCode == keyCombo. QWERTYKeyCode &&
161- modifiers == keyCombo. modifiers &&
162- doubledModifiers == keyCombo. doubledModifiers
170+ return key == keyCombo. key &&
171+ modifiers == keyCombo. modifiers &&
172+ doubledModifiers == keyCombo. doubledModifiers
163173 }
164174
165175}
0 commit comments