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?
49 let store = ServerDataStore.default
53 guard case 1...4 = number else {
55 Logger.shared.log("Fleet number out of range")
64 if let deck = store.sync(execute: { self.store.deck(by: number) }) {
66 self.setupDeck(deck: deck)
71 ServerDataStore.default
72 .future { _ -> Deck? in
74 guard let deck = self.store.sync(execute: { self.store.deck(by: number) }) else {
83 self.setupDeck(deck: deck)
87 Logger.shared.log("\(error)")
91 subscript(_ index: Int) -> Ship? {
93 return store.sync { self.deck?[index] }
96 private func setupDeck(deck: Deck) {
99 self.observer = DeckObserver(deck: deck) { [weak self] in
101 self?.setupShips(deck: $0)
105 private func setupShips(deck: Deck) {
107 ships = store.sync { deck[0...6] }