5 // Created by Hori,Masaki on 2017/01/29.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 // swiftlint:disable identifier_name
12 final class Deck: KCManagedObject {
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
28 // swiftlint:eable identifier_name
32 static var maxShipCount: Int = 7
34 func setShip(id: Int, for position: Int) {
52 default: break // fatalError("Deck.setShip: position out of range.")
57 func shipId(of position: Int) -> Int? {
80 private func ship(ofId identifier: Int) -> Ship? {
82 guard let moc = self.managedObjectContext else {
87 let req = NSFetchRequest<Ship>(entityName: Ship.entityName)
88 req.predicate = NSPredicate(#keyPath(Ship.id), equal: identifier)
90 guard let ships = try? moc.fetch(req) else {
98 subscript(_ index: Int) -> Ship? {
100 guard let shipId = shipId(of: index) else {
105 return ship(ofId: shipId)
108 subscript(_ range: CountableClosedRange<Int>) -> [Ship] {
110 return range.compactMap { self[$0] }
113 subscript(_ range: CountableRange<Int>) -> [Ship] {
115 return range.compactMap { self[$0] }