OSDN Git Service

CoreDataの不要なプロパティを削除
[kcd/KCD.git] / KCD / Deck.swift
index 25b0ee0..2898056 100644 (file)
 
 import Cocoa
 
-class Deck: KCManagedObject {
-    @NSManaged var flagship: NSNumber?
+// swiftlint:disable identifier_name
+final class Deck: KCManagedObject {
+    
     @NSManaged var id: Int
-    @NSManaged var member_id: NSNumber? // swiftlint:disable:this variable_name
-    @NSManaged var mission_0: Int   // swiftlint:disable:this variable_name
-    @NSManaged var mission_1: Int   // swiftlint:disable:this variable_name
-    @NSManaged var mission_2: Int   // swiftlint:disable:this variable_name
-    @NSManaged var mission_3: Int   // swiftlint:disable:this variable_name
-    @NSManaged var name: String // swiftlint:disable:this variable_name
-    @NSManaged var name_id: NSNumber?   // swiftlint:disable:this variable_name
-    @NSManaged var ship_0: Int  // swiftlint:disable:this variable_name
-    @NSManaged var ship_1: Int  // swiftlint:disable:this variable_name
-    @NSManaged var ship_2: Int  // swiftlint:disable:this variable_name
-    @NSManaged var ship_3: Int  // swiftlint:disable:this variable_name
-    @NSManaged var ship_4: Int  // swiftlint:disable:this variable_name
-    @NSManaged var ship_5: Int  // swiftlint:disable:this variable_name
+    @NSManaged var mission_0: Int
+    @NSManaged var mission_1: Int
+    @NSManaged var mission_2: Int
+    @NSManaged var mission_3: Int
+    @NSManaged var name: String
+    @NSManaged var ship_0: Int
+    @NSManaged var ship_1: Int
+    @NSManaged var ship_2: Int
+    @NSManaged var ship_3: Int
+    @NSManaged var ship_4: Int
+    @NSManaged var ship_5: Int
+    @NSManaged var ship_6: Int
 }
+// swiftlint:eable identifier_name
 
 extension Deck {
-    private func shipId(ofPosition position: Int) -> Int? {
+    
+    static var maxShipCount: Int = 7
+    
+    func setShip(id: Int, for position: Int) {
+        
+        switch position {
+            
+        case 0: ship_0 = id
+            
+        case 1: ship_1 = id
+            
+        case 2: ship_2 = id
+            
+        case 3: ship_3 = id
+            
+        case 4: ship_4 = id
+            
+        case 5: ship_5 = id
+            
+        case 6: ship_6 = id
+            
+        default: break // fatalError("Deck.setShip: position out of range.")
+            
+        }
+    }
+    
+    func shipId(of position: Int) -> Int? {
+        
         switch position {
+            
         case 0: return ship_0
+            
         case 1: return ship_1
+            
         case 2: return ship_2
+            
         case 3: return ship_3
+            
         case 4: return ship_4
+            
         case 5: return ship_5
+            
+        case 6: return ship_6
+            
         default: return nil
+            
         }
     }
+    
     private func ship(ofId identifier: Int) -> Ship? {
-        guard let moc = self.managedObjectContext else { return nil }
-        let req = NSFetchRequest<Ship>(entityName: "Ship")
-        req.predicate = NSPredicate(format: "id = %ld", identifier)
-        guard let ships = try? moc.fetch(req),
-            let ship = ships.first
-            else { return nil }
-        return ship as Ship
+        
+        guard let moc = self.managedObjectContext else {
+            
+            return nil
+        }
+        
+        let req = NSFetchRequest<Ship>(entityName: Ship.entityName)
+        req.predicate = NSPredicate(#keyPath(Ship.id), equal: identifier)
+        
+        guard let ships = try? moc.fetch(req) else {
+            
+            return nil
+        }
+        
+        return ships.first
     }
     
     subscript(_ index: Int) -> Ship? {
-        guard let shipId = shipId(ofPosition: index) else { return nil }
+        
+        guard let shipId = shipId(of: index) else {
+            
+            return nil
+        }
+        
         return ship(ofId: shipId)
     }
+    
+    subscript(_ range: CountableClosedRange<Int>) -> [Ship] {
+        
+        return range.compactMap { self[$0] }
+    }
+    
+    subscript(_ range: CountableRange<Int>) -> [Ship] {
+        
+        return range.compactMap { self[$0] }
+    }
 }