OSDN Git Service

CoreDataの不要なプロパティを削除
[kcd/KCD.git] / KCD / Deck.swift
1 //
2 //  KCDeck.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/01/29.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 // swiftlint:disable identifier_name
12 final class Deck: KCManagedObject {
13     
14     @NSManaged var id: Int
15     @NSManaged var mission_0: Int
16     @NSManaged var mission_1: Int
17     @NSManaged var mission_2: Int
18     @NSManaged var mission_3: Int
19     @NSManaged var name: String
20     @NSManaged var ship_0: Int
21     @NSManaged var ship_1: Int
22     @NSManaged var ship_2: Int
23     @NSManaged var ship_3: Int
24     @NSManaged var ship_4: Int
25     @NSManaged var ship_5: Int
26     @NSManaged var ship_6: Int
27 }
28 // swiftlint:eable identifier_name
29
30 extension Deck {
31     
32     static var maxShipCount: Int = 7
33     
34     func setShip(id: Int, for position: Int) {
35         
36         switch position {
37             
38         case 0: ship_0 = id
39             
40         case 1: ship_1 = id
41             
42         case 2: ship_2 = id
43             
44         case 3: ship_3 = id
45             
46         case 4: ship_4 = id
47             
48         case 5: ship_5 = id
49             
50         case 6: ship_6 = id
51             
52         default: break // fatalError("Deck.setShip: position out of range.")
53             
54         }
55     }
56     
57     func shipId(of position: Int) -> Int? {
58         
59         switch position {
60             
61         case 0: return ship_0
62             
63         case 1: return ship_1
64             
65         case 2: return ship_2
66             
67         case 3: return ship_3
68             
69         case 4: return ship_4
70             
71         case 5: return ship_5
72             
73         case 6: return ship_6
74             
75         default: return nil
76             
77         }
78     }
79     
80     private func ship(ofId identifier: Int) -> Ship? {
81         
82         guard let moc = self.managedObjectContext else {
83             
84             return nil
85         }
86         
87         let req = NSFetchRequest<Ship>(entityName: Ship.entityName)
88         req.predicate = NSPredicate(#keyPath(Ship.id), equal: identifier)
89         
90         guard let ships = try? moc.fetch(req) else {
91             
92             return nil
93         }
94         
95         return ships.first
96     }
97     
98     subscript(_ index: Int) -> Ship? {
99         
100         guard let shipId = shipId(of: index) else {
101             
102             return nil
103         }
104         
105         return ship(ofId: shipId)
106     }
107     
108     subscript(_ range: CountableClosedRange<Int>) -> [Ship] {
109         
110         return range.compactMap { self[$0] }
111     }
112     
113     subscript(_ range: CountableRange<Int>) -> [Ship] {
114         
115         return range.compactMap { self[$0] }
116     }
117 }