OSDN Git Service

Swift4.1に更新
[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     static var maxShipCount: Int = 7
36     
37     func setShip(id: Int, for position: Int) {
38         
39         switch position {
40         case 0: ship_0 = id
41         case 1: ship_1 = id
42         case 2: ship_2 = id
43         case 3: ship_3 = id
44         case 4: ship_4 = id
45         case 5: ship_5 = id
46         case 6: ship_6 = id
47         default: break // fatalError("Deck.setShip: position out of range.")
48         }
49     }
50     
51     func shipId(of position: Int) -> Int? {
52         
53         switch position {
54         case 0: return ship_0
55         case 1: return ship_1
56         case 2: return ship_2
57         case 3: return ship_3
58         case 4: return ship_4
59         case 5: return ship_5
60         case 6: return ship_6
61         default: return nil
62         }
63     }
64     
65     private func ship(ofId identifier: Int) -> Ship? {
66         
67         guard let moc = self.managedObjectContext else { return nil }
68         
69         let req = NSFetchRequest<Ship>(entityName: Ship.entityName)
70         req.predicate = NSPredicate(#keyPath(Ship.id), equal: identifier)
71         
72         guard let ships = try? moc.fetch(req) else { return nil }
73         
74         return ships.first
75     }
76     
77     subscript(_ index: Int) -> Ship? {
78         
79         guard let shipId = shipId(of: index) else { return nil }
80         
81         return ship(ofId: shipId)
82     }
83     
84     subscript(_ range: CountableClosedRange<Int>) -> [Ship] {
85         
86         return range.compactMap { self[$0] }
87     }
88     
89     subscript(_ range: CountableRange<Int>) -> [Ship] {
90         
91         return range.compactMap { self[$0] }
92     }
93 }