OSDN Git Service

Equatableを自動実装させるようにした
[kcd/KCD.git] / KCD / ScreenshotDetailViewController.swift
index 16a3326..3bbd1ed 100644 (file)
@@ -8,46 +8,49 @@
 
 import Cocoa
 
-class ScreenshotDetailViewController: BridgeViewController {
-    deinit {
-        arrayController.removeObserver(self, forKeyPath: NSSelectionIndexesBinding)
-    }
+final class ScreenshotDetailViewController: BridgeViewController {
     
-    @IBOutlet var imageView: ImageView!
+    @IBOutlet private var imageView: ImageView!
     
-    override var nibName: String! {
-        return "ScreenshotDetailViewController"
+    override var nibName: NSNib.Name {
+        
+        return .nibName(instanceOf: self)
     }
+    
     override var contentRect: NSRect {
+        
         return imageView.convert(imageView.imageRect, to: nil)
     }
     
     private var currentSelection: [ScreenshotInformation] = []
     
+    private var selectionObservation: NSKeyValueObservation?
+    
     override func viewDidLoad() {
+        
         super.viewDidLoad()
         
-        arrayController.addObserver(self, forKeyPath: NSSelectionIndexesBinding, context: nil)
+        selectionObservation = arrayController.observe(\NSArrayController.selectionIndexes) { [weak self] (_, _) in
+            
+            self?.updateSelections()
+        }
+        
         updateSelections()
     }
     
-    override func observeValue(forKeyPath keyPath: String?,
-                               of object: Any?,
-                               change: [NSKeyValueChangeKey: Any]?,
-                               context: UnsafeMutableRawPointer?) {
-        if keyPath == NSSelectionIndexesBinding {
-            updateSelections()
+    private func updateSelections() {
+        
+        guard let selection = arrayController.selectedObjects as? [ScreenshotInformation] else {
+            
             return
         }
         
-        super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
-    }
-    
-    private func updateSelections() {
-        guard let selection = arrayController.selectedObjects as? [ScreenshotInformation]
-            else { return }
-        if currentSelection == selection { return }
-        imageView.images = selection.flatMap { NSImage(contentsOf: $0.url) }
+        if currentSelection == selection {
+            
+            return
+        }
+        
+        imageView.images = selection.compactMap { NSImage(contentsOf: $0.url) }
         currentSelection = selection
     }
 }