5 // Created by Hori,Masaki on 2017/01/22.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 final class DeckObserver {
13 private let deck: Deck
14 private let handler: (Deck) -> Void
16 private var observation: [NSKeyValueObservation] = []
18 init(deck: Deck, handler: @escaping (Deck) -> Void) {
21 self.handler = handler
23 observation += [deck.observe(\Deck.ship_0, changeHandler: observeHandler)]
24 observation += [deck.observe(\Deck.ship_1, changeHandler: observeHandler)]
25 observation += [deck.observe(\Deck.ship_2, changeHandler: observeHandler)]
26 observation += [deck.observe(\Deck.ship_3, changeHandler: observeHandler)]
27 observation += [deck.observe(\Deck.ship_4, changeHandler: observeHandler)]
28 observation += [deck.observe(\Deck.ship_5, changeHandler: observeHandler)]
29 observation += [deck.observe(\Deck.ship_6, changeHandler: observeHandler)]
34 private func observeHandler(_: Deck, _:NSKeyValueObservedChange<Int>) {
40 final class Fleet: NSObject {
44 private var observer: DeckObserver?
46 @objc dynamic private(set) var ships: [Ship] = []
47 private var deck: Deck?
51 guard case 1...4 = number else {
53 Logger.shared.log("Fleet number out of range")
61 if let deck = ServerDataStore.default.deck(by: number) {
63 self.setupDeck(deck: deck)
68 ServerDataStore.default
69 .future { _ -> Deck? in
71 guard let deck = ServerDataStore.default.deck(by: number) else { return .none }
77 self.setupDeck(deck: deck)
81 Logger.shared.log("\(error)")
85 subscript(_ index: Int) -> Ship? { return deck?[index] }
87 private func setupDeck(deck: Deck) {
90 self.observer = DeckObserver(deck: deck) { [weak self] in
92 self?.setupShips(deck: $0)
96 private func setupShips(deck: Deck) {