OSDN Git Service

addObserverOnceを利用するようにした
[kcd/KCD.git] / KCD / FleetManager.swift
index cdcf51e..a9ec66d 100644 (file)
@@ -8,11 +8,6 @@
 
 import Cocoa
 
-extension Notification.Name {
-    
-    static let DidPrepareFleet = Notification.Name("com.masakih.KCD.Notification.DidPrepareFleet")
-}
-
 final class FleetManager: NSObject {
     
     override init() {
@@ -22,19 +17,15 @@ final class FleetManager: NSObject {
         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)
@@ -50,23 +41,23 @@ final class FleetManager: NSObject {
         
         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()
-            
         }
     }