@@ -561,26 +561,21 @@ extension Character {
561
561
}
562
562
563
563
final class UserDefaultsObservation : NSObject {
564
- typealias Callback = ( _ name : KeyboardShortcuts . Name , _ newKeyValue: String ? ) -> Void
564
+ typealias Callback = ( _ newKeyValue: String ? ) -> Void
565
565
566
- private let name : KeyboardShortcuts . Name
567
566
private let key : String
568
567
static var observationContext = 0
569
568
private weak var suite : UserDefaults ?
570
569
private var isObserving = false
571
570
private let callback : Callback
572
571
private var lock = NSLock ( )
573
572
574
- private var token : NSKeyValueObservation ? = nil
575
-
576
573
init (
577
574
suite: UserDefaults ,
578
- name: KeyboardShortcuts . Name ,
579
575
key: String ,
580
576
_ callback: @escaping Callback
581
577
) {
582
578
self . suite = suite
583
- self . name = name
584
579
self . key = key
585
580
self . callback = callback
586
581
}
@@ -590,44 +585,41 @@ final class UserDefaultsObservation: NSObject {
590
585
}
591
586
592
587
func start( ) {
593
- lock. lock ( )
588
+ lock. withLock {
589
+ guard !isObserving else {
590
+ return
591
+ }
594
592
595
- guard !isObserving else {
596
- return
593
+ suite? . addObserver (
594
+ self ,
595
+ forKeyPath: key,
596
+ options: [ . new] ,
597
+ context: & Self. observationContext
598
+ )
599
+ isObserving = true
597
600
}
598
-
599
- suite? . addObserver (
600
- self ,
601
- forKeyPath: key,
602
- options: [ . new] ,
603
- context: & Self. observationContext
604
- )
605
- isObserving = true
606
-
607
- lock. unlock ( )
608
601
}
609
602
610
603
func invalidate( ) {
611
- lock. lock ( )
604
+ lock. withLock {
605
+ guard isObserving else {
606
+ return
607
+ }
612
608
613
- guard isObserving else {
614
- return
609
+ suite? . removeObserver (
610
+ self ,
611
+ forKeyPath: key
612
+ )
613
+ isObserving = false
614
+ suite = nil
615
615
}
616
-
617
- suite? . removeObserver (
618
- self ,
619
- forKeyPath: key
620
- )
621
- isObserving = false
622
- suite = nil
623
-
624
- lock. unlock ( )
625
616
}
626
617
618
+ // swiftlint:disable:next block_based_kvo
627
619
override func observeValue(
628
620
forKeyPath keyPath: String ? ,
629
621
of object: Any ? ,
630
- change: [ NSKeyValueChangeKey : Any ] ? ,
622
+ change: [ NSKeyValueChangeKey : Any ] ? , // swiftlint:disable:this discouraged_optional_collection
631
623
context: UnsafeMutableRawPointer ?
632
624
) {
633
625
guard
@@ -659,6 +651,6 @@ final class UserDefaultsObservation: NSObject {
659
651
}
660
652
661
653
let encodedString = change [ . newKey] as? String
662
- callback ( self . name , encodedString)
654
+ callback ( encodedString)
663
655
}
664
656
}
0 commit comments