OSDN Git Service

shared instanceを持つようにした
[kcd/KCD.git] / KCD / FleetManager.swift
index bd01c19..b35b554 100644 (file)
@@ -25,6 +25,7 @@ final class FleetManager: NSObject {
         if keyPath == "arrangedObjects.ships" {
             
             setNewFleetNumberToShip()
+            
             return
         }
         
@@ -39,22 +40,22 @@ final class FleetManager: NSObject {
     
     private func setupFleets() {
         
-        fleets = (1...4).flatMap { Fleet(number: $0) }
+        fleets = (1...4).compactMap { Fleet(number: $0) }
         
         guard fleets.count == 4 else {
             
-            return Logger.shared.log("Can not create Fleet")
+            Logger.shared.log("Can not create Fleet")
+            
+            return
         }
         
         if fleets[0].ships.isEmpty {
             
-            let center = NotificationCenter.default
-            weak var token: NSObjectProtocol!
-            token = center.addObserver(forName: .PortAPIReceived, object: nil, queue: nil) {_ in
-                
-                center.removeObserver(token)
-                DispatchQueue.main.async(execute: self.setupFleetController)
-                DispatchQueue.main.async(execute: self.setNewFleetNumberToShip)
+            NotificationCenter.default
+                .addObserverOnce(forName: .PortAPIReceived, object: nil, queue: nil) { _ in
+                    
+                    DispatchQueue.main.async(execute: self.setupFleetController)
+                    DispatchQueue.main.async(execute: self.setNewFleetNumberToShip)
             }
             
         } else {
@@ -66,16 +67,18 @@ final class FleetManager: NSObject {
     private func setNewFleetNumberToShip() {
         
         let store = ServerDataStore.oneTimeEditor()
-        
-        // clear all
-        store.shipsInFleet().forEach { $0.fleet = 0 as NSNumber }
-        
-        // set
-        fleets.enumerated().forEach { (index, fleet) in
+        store.sync {
+            
+            // clear all
+            store.shipsInFleet().forEach { $0.fleet = 0 as NSNumber }
             
-            fleet.ships.forEach {
+            // set
+            self.fleets.enumerated().forEach { index, fleet in
                 
-                store.ship(by: $0.id)?.fleet = (index + 1) as NSNumber
+                fleet.ships.forEach { ship in
+                    
+                    store.ship(by: ship.id)?.fleet = (index + 1) as NSNumber
+                }
             }
         }
     }