OSDN Git Service

位置を指定してship_idをセットする関数を追加
[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 class Deck: KCManagedObject {
12     @NSManaged var flagship: NSNumber?
13     @NSManaged var id: Int
14     @NSManaged var member_id: NSNumber? // swiftlint:disable:this variable_name
15     @NSManaged var mission_0: Int   // swiftlint:disable:this variable_name
16     @NSManaged var mission_1: Int   // swiftlint:disable:this variable_name
17     @NSManaged var mission_2: Int   // swiftlint:disable:this variable_name
18     @NSManaged var mission_3: Int   // swiftlint:disable:this variable_name
19     @NSManaged var name: String // swiftlint:disable:this variable_name
20     @NSManaged var name_id: NSNumber?   // swiftlint:disable:this variable_name
21     @NSManaged var ship_0: Int  // swiftlint:disable:this variable_name
22     @NSManaged var ship_1: Int  // swiftlint:disable:this variable_name
23     @NSManaged var ship_2: Int  // swiftlint:disable:this variable_name
24     @NSManaged var ship_3: Int  // swiftlint:disable:this variable_name
25     @NSManaged var ship_4: Int  // swiftlint:disable:this variable_name
26     @NSManaged var ship_5: Int  // swiftlint:disable:this variable_name
27 }
28
29 extension Deck {
30     func setShip(id: Int, for position: Int) {
31         switch position {
32         case 0: return ship_0 = id
33         case 1: return ship_1 = id
34         case 2: return ship_2 = id
35         case 3: return ship_3 = id
36         case 4: return ship_4 = id
37         case 5: return ship_5 = id
38         default: fatalError("Deck.setShip: position out of range.")
39         }
40     }
41     func shipId(of position: Int) -> Int? {
42         switch position {
43         case 0: return ship_0
44         case 1: return ship_1
45         case 2: return ship_2
46         case 3: return ship_3
47         case 4: return ship_4
48         case 5: return ship_5
49         default: return nil
50         }
51     }
52     private func ship(ofId identifier: Int) -> Ship? {
53         guard let moc = self.managedObjectContext else { return nil }
54         let req = NSFetchRequest<Ship>(entityName: "Ship")
55         req.predicate = NSPredicate(format: "id = %ld", identifier)
56         guard let ships = try? moc.fetch(req),
57             let ship = ships.first
58             else { return nil }
59         return ship as Ship
60     }
61     
62     subscript(_ index: Int) -> Ship? {
63         guard let shipId = shipId(of: index) else { return nil }
64         return ship(ofId: shipId)
65     }
66 }