@@ -201,15 +201,15 @@ open class NSKeyedUnarchiver : NSCoder {
201
201
}
202
202
203
203
private func _objectInCurrentDecodingContext< T> ( forKey key: String ? ) -> T ? {
204
- var unwrappedKey = key
204
+ let unwrappedKey : String
205
205
206
- if key != nil {
207
- unwrappedKey = escapeArchiverKey ( key! )
206
+ if let key = key {
207
+ unwrappedKey = escapeArchiverKey ( key)
208
208
} else {
209
209
unwrappedKey = _nextGenericKey ( )
210
210
}
211
211
212
- if let v = _currentDecodingContext. dict [ unwrappedKey! ] {
212
+ if let v = _currentDecodingContext. dict [ unwrappedKey] {
213
213
return v as? T
214
214
}
215
215
return nil
@@ -272,18 +272,18 @@ open class NSKeyedUnarchiver : NSCoder {
272
272
}
273
273
274
274
private func _isClassAllowed( _ assertedClass: AnyClass ? , allowedClasses: [ AnyClass ] ? ) -> Bool {
275
- if assertedClass == nil {
275
+ guard let assertedClass = assertedClass else {
276
276
return false
277
277
}
278
278
279
279
if _flags. contains ( . requiresSecureCoding) {
280
280
if let unwrappedAllowedClasses = allowedClasses {
281
- if unwrappedAllowedClasses. contains ( where: { NSKeyedUnarchiver . _classIsKindOfClass ( assertedClass! , $0) } ) {
281
+ if unwrappedAllowedClasses. contains ( where: { NSKeyedUnarchiver . _classIsKindOfClass ( assertedClass, $0) } ) {
282
282
return true
283
283
}
284
284
}
285
285
286
- fatalError ( " Value was of unexpected class \( assertedClass! ) " )
286
+ fatalError ( " Value was of unexpected class \( assertedClass) " )
287
287
} else {
288
288
return true
289
289
}
@@ -311,25 +311,25 @@ open class NSKeyedUnarchiver : NSCoder {
311
311
return aClass
312
312
}
313
313
314
- guard let unwrappedClassDict = classDict else {
314
+ guard let classDict = classDict else {
315
315
return false
316
316
}
317
317
318
318
// TODO is it required to validate the superclass hierarchy?
319
- let assertedClassName = unwrappedClassDict [ " $classname " ] as? String
320
- let assertedClassHints = unwrappedClassDict [ " $classhints " ] as? [ String ]
321
- let assertedClasses = unwrappedClassDict [ " $classes " ] as? [ String ]
319
+ let assertedClassName = classDict [ " $classname " ] as? String
320
+ let assertedClassHints = classDict [ " $classhints " ] as? [ String ]
321
+ let assertedClasses = classDict [ " $classes " ] as? [ String ]
322
322
323
- if assertedClassName != nil {
324
- let assertedClass : AnyClass ? = _classForClassName ( assertedClassName! )
323
+ if let assertedClassName = assertedClassName {
324
+ let assertedClass : AnyClass ? = _classForClassName ( assertedClassName)
325
325
if _isClassAllowed ( assertedClass, allowedClasses: allowedClasses) {
326
326
classToConstruct = assertedClass
327
327
return true
328
328
}
329
329
}
330
330
331
- if assertedClassHints != nil {
332
- for assertedClassHint in assertedClassHints! {
331
+ if let assertedClassHints = assertedClassHints {
332
+ for assertedClassHint in assertedClassHints {
333
333
// FIXME check whether class hints should be subject to mapping or not
334
334
let assertedClass : AnyClass ? = NSClassFromString ( assertedClassHint)
335
335
if _isClassAllowed ( assertedClass, allowedClasses: allowedClasses) {
@@ -339,11 +339,11 @@ open class NSKeyedUnarchiver : NSCoder {
339
339
}
340
340
}
341
341
342
- if assertedClassName != nil {
342
+ if let assertedClassName = assertedClassName {
343
343
if let unwrappedDelegate = self . delegate {
344
344
classToConstruct = unwrappedDelegate. unarchiver ( self ,
345
- cannotDecodeObjectOfClassName: assertedClassName! ,
346
- originalClasses: assertedClasses != nil ? assertedClasses! : [ ] )
345
+ cannotDecodeObjectOfClassName: assertedClassName,
346
+ originalClasses: assertedClasses ?? [ ] )
347
347
if classToConstruct != nil {
348
348
return true
349
349
}
@@ -417,28 +417,26 @@ open class NSKeyedUnarchiver : NSCoder {
417
417
}
418
418
419
419
private func _replacementObject( _ decodedObject: Any ? ) -> Any ? {
420
- var object : Any ? = nil // object to encode after substitution
421
-
422
- // nil cannot be mapped
423
- if decodedObject == nil {
420
+ // nil cannot be mapped (this appears to differ from Darwin?)
421
+ guard let decodedObject = decodedObject else {
424
422
return nil
425
423
}
426
424
427
425
// check replacement cache
428
- object = self . _replacementMap [ __SwiftValue. store ( decodedObject!) ]
429
- if object != nil {
426
+ if let object = self . _replacementMap [ __SwiftValue. store ( decodedObject) ] {
430
427
return object
431
428
}
432
-
433
- // object replaced by delegate. If the delegate returns nil, nil is encoded
429
+
430
+ // object replaced by delegate. If using ARC, the delegate should only return
431
+ // nil if the object itself is nil.
434
432
if let unwrappedDelegate = self . delegate {
435
- object = unwrappedDelegate. unarchiver ( self , didDecode: decodedObject! )
436
- if object != nil {
437
- replaceObject ( decodedObject! , withObject: object!)
438
- return object
439
- }
433
+ let object = unwrappedDelegate. unarchiver ( self , didDecode: decodedObject)
434
+ if object != nil {
435
+ replaceObject ( decodedObject, withObject: object!)
436
+ return object
437
+ }
440
438
}
441
-
439
+
442
440
return decodedObject
443
441
}
444
442
@@ -470,12 +468,12 @@ open class NSKeyedUnarchiver : NSCoder {
470
468
throw InternalError . decodingHasAlreadyFailed
471
469
}
472
470
473
- if ! ( objectRef is _NSKeyedArchiverUID ) {
471
+ guard let objectRef = objectRef as? _NSKeyedArchiverUID else {
474
472
throw _decodingError ( . coderReadCorrupt,
475
473
withDescription: " Object \( objectRef) is not a reference. The data may be corrupt. " )
476
474
}
477
-
478
- guard let dereferencedObject = _dereferenceObjectReference ( objectRef as! _NSKeyedArchiverUID ) else {
475
+
476
+ guard let dereferencedObject = _dereferenceObjectReference ( objectRef) else {
479
477
throw _decodingError ( . coderReadCorrupt,
480
478
withDescription: " Invalid object reference \( objectRef) . The data may be corrupt. " )
481
479
}
@@ -486,7 +484,7 @@ open class NSKeyedUnarchiver : NSCoder {
486
484
487
485
if _isContainer ( dereferencedObject) {
488
486
// check cached of decoded objects
489
- object = _cachedObjectForReference ( objectRef as! _NSKeyedArchiverUID )
487
+ object = _cachedObjectForReference ( objectRef)
490
488
if object == nil {
491
489
guard let dict = dereferencedObject as? Dictionary < String , Any > else {
492
490
throw _decodingError ( . coderReadCorrupt,
@@ -523,7 +521,7 @@ open class NSKeyedUnarchiver : NSCoder {
523
521
withDescription: " Class \( classToConstruct!) failed to decode. The data may be corrupt. " )
524
522
}
525
523
526
- _cacheObject ( object!, forReference: objectRef as! _NSKeyedArchiverUID )
524
+ _cacheObject ( object!, forReference: objectRef)
527
525
}
528
526
} else {
529
527
object = __SwiftValue. store ( dereferencedObject)
0 commit comments