OSDN Git Service

addObserverOnceを利用するようにした
[kcd/KCD.git] / KCD / FleetManager.swift
index 2f0f4d2..a9ec66d 100644 (file)
@@ -8,49 +8,61 @@
 
 import Cocoa
 
-extension Notification.Name {
-    static let DidPrepareFleet = Notification.Name("com.masakih.KCD.Notification.DidPrepareFleet")
-}
-
-class FleetManager: NSObject {
+final class FleetManager: NSObject {
+    
     override init() {
+        
         super.init()
+        
         setupFleets()
     }
     
-    private(set) var fleets: [Fleet] = []
+    @objc private(set) var fleets: [Fleet] = []
     private var fleetController: NSArrayController!
     
-    override func observeValue(forKeyPath keyPath: String?,
-                               of object: Any?,
-                               change: [NSKeyValueChangeKey: Any]?,
-                               context: UnsafeMutableRawPointer?) {
+    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
+        
         if keyPath == "arrangedObjects.ships" {
+            
             setNewFleetNumberToShip()
             return
         }
+        
         super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
     }
     
     private func setupFleetController() {
+        
         fleetController = NSArrayController(content: fleets)
         fleetController.addObserver(self, forKeyPath: "arrangedObjects.ships", context: nil)
     }
+    
     private func setupFleets() {
+        
         fleets = (1...4).flatMap { Fleet(number: $0) }
-        guard fleets.count == 4 else { return print("Can not create Fleet") }
+        
+        guard fleets.count == 4 else {
+            
+            return Logger.shared.log("Can not create Fleet")
+        }
+        
         if fleets[0].ships.isEmpty {
-            let center = NotificationCenter.default
-            var token: NSObjectProtocol!
-            token = center.addObserver(forName: .PortAPIReceived, object: nil, queue: nil) {_ in 
-                center.removeObserver(token)
-                self.setupFleetController()
-                center.post(name: .DidPrepareFleet, object: self)
+            
+            NotificationCenter.default
+                .addObserverOnce(forName: .PortAPIReceived, object: nil, queue: nil) { _ in
+                    
+                    DispatchQueue.main.async(execute: self.setupFleetController)
+                    DispatchQueue.main.async(execute: self.setNewFleetNumberToShip)
             }
-        } else { setupFleetController() }
+            
+        } else {
+            
+            setupFleetController()
+        }
     }
     
     private func setNewFleetNumberToShip() {
+        
         let store = ServerDataStore.oneTimeEditor()
         
         // clear all
@@ -58,8 +70,10 @@ class FleetManager: NSObject {
         
         // set
         fleets.enumerated().forEach { (index, fleet) in
+            
             fleet.ships.forEach {
-                store.ship(byId: $0.id)?.fleet = (index + 1) as NSNumber
+                
+                store.ship(by: $0.id)?.fleet = (index + 1) as NSNumber
             }
         }
     }