OSDN Git Service

Deckにship_6を追加
[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 variable_name
12 final class Deck: KCManagedObject {
13     
14     @NSManaged var flagship: NSNumber?
15     @NSManaged var id: Int
16     @NSManaged var member_id: NSNumber?
17     @NSManaged var mission_0: Int
18     @NSManaged var mission_1: Int
19     @NSManaged var mission_2: Int
20     @NSManaged var mission_3: Int
21     @NSManaged var name: String
22     @NSManaged var name_id: NSNumber?
23     @NSManaged var ship_0: Int
24     @NSManaged var ship_1: Int
25     @NSManaged var ship_2: Int
26     @NSManaged var ship_3: Int
27     @NSManaged var ship_4: Int
28     @NSManaged var ship_5: Int
29     @NSManaged var ship_6: Int
30 }
31 // swiftlint:eable variable_name
32
33 extension Deck {
34     
35     func setShip(id: Int, for position: Int) {
36         
37         switch position {
38         case 0: ship_0 = id
39         case 1: ship_1 = id
40         case 2: ship_2 = id
41         case 3: ship_3 = id
42         case 4: ship_4 = id
43         case 5: ship_5 = id
44         default: break // fatalError("Deck.setShip: position out of range.")
45         }
46     }
47     
48     func shipId(of position: Int) -> Int? {
49         
50         switch position {
51         case 0: return ship_0
52         case 1: return ship_1
53         case 2: return ship_2
54         case 3: return ship_3
55         case 4: return ship_4
56         case 5: return ship_5
57         default: return nil
58         }
59     }
60     
61     private func ship(ofId identifier: Int) -> Ship? {
62         
63         guard let moc = self.managedObjectContext else { return nil }
64         
65         let req = NSFetchRequest<Ship>(entityName: Ship.entityName)
66         req.predicate = NSPredicate(#keyPath(Ship.id), equal: identifier)
67         
68         guard let ships = try? moc.fetch(req) else { return nil }
69         
70         return ships.first
71     }
72     
73     subscript(_ index: Int) -> Ship? {
74         
75         guard let shipId = shipId(of: index) else { return nil }
76         
77         return ship(ofId: shipId)
78     }
79     
80     subscript(_ range: CountableClosedRange<Int>) -> [Ship] {
81         
82         return range.flatMap { self[$0] }
83     }
84 }