OSDN Git Service

Swift4.1に更新
[kcd/KCD.git] / KCD / PowerUpSupportViewController.swift
1 //
2 //  PowerUpSupportViewController.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2016/12/25.
6 //  Copyright © 2016年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 final class PowerUpSupportViewController: MainTabVIewItemViewController {
12     
13     @objc let managedObjectContext = ServerDataStore.default.context
14     
15     @IBOutlet private var shipController: NSArrayController!
16     @IBOutlet private weak var typeSegment: NSSegmentedControl!
17     
18     private var sortDescriptorsObservation: NSKeyValueObservation?
19     
20     override var hasShipTypeSelector: Bool { return true }
21     override var selectedShipType: ShipTabType {
22         
23         didSet {
24             shipController.filterPredicate = customPredicate()
25             shipController.rearrangeObjects()
26         }
27     }
28     
29     override var nibName: NSNib.Name {
30         
31         return .nibName(instanceOf: self)
32     }
33     
34     var omitPredicate: NSPredicate? {
35         
36         let sd = UserDefaults.standard
37         let predicates = [(Bool, NSPredicate)]()
38             .appended { (sd[.hideMaxKaryoku], .false(#keyPath(Ship.isMaxKaryoku))) }
39             .appended { (sd[.hideMaxRaisou], .false(#keyPath(Ship.isMaxRaisou))) }
40             .appended { (sd[.hideMaxTaiku], .false(#keyPath(Ship.isMaxTaiku))) }
41             .appended { (sd[.hideMaxSoukou], .false(#keyPath(Ship.isMaxSoukou))) }
42             .appended { (sd[.hideMaxLucky], .false(#keyPath(Ship.isMaxLucky))) }
43             .compactMap { (b, s) in b ? s : nil }
44         
45         if predicates.isEmpty { return nil }
46         
47         return .and(predicates)
48     }
49     
50     override func viewDidLoad() {
51         
52         super.viewDidLoad()
53         
54         changeCategory(nil)
55         
56         do {
57             
58             try shipController.fetch(with: nil, merge: true)
59             
60         } catch {
61             
62             fatalError("PowerUpSupportViewController: can not fetch. \(error)")
63         }
64         
65         shipController.sortDescriptors = UserDefaults.standard[.powerupSupportSortDecriptors]
66         sortDescriptorsObservation = shipController.observe(\NSArrayController.sortDescriptors) { [weak self] _, _ in
67             
68             UserDefaults.standard[.powerupSupportSortDecriptors] = self?.shipController.sortDescriptors ?? []
69         }
70     }
71     
72     private func customPredicate() -> NSPredicate? {
73         
74         switch (shipTypePredicte(for: selectedShipType), omitPredicate) {
75             
76         case let (s?, o?): return .and([o, s])
77         case let (s?, nil): return s
78         case let (nil, o?): return o
79         default: return nil
80         }
81     }
82     
83     @IBAction func changeCategory(_ sender: AnyObject?) {
84         
85         ShipTabType(rawValue: typeSegment.selectedSegment).map { selectedShipType = $0 }
86     }
87 }