2 // DefaultKeyExtendedValues.swift
5 // Created by Hori,Masaki on 2017/07/31.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
13 extension UserDefaults {
15 private func keyedArchivedObject<T>(forKey key: String) -> T? {
17 guard let data = self.object(forKey: key) as? Data else {
22 return NSKeyedUnarchiver.unarchiveObject(with: data) as? T
25 private func setKeyedArchived(_ object: Any?, forKey key: String) {
27 guard let object = object else {
29 self.removeObject(forKey: key)
34 let data = NSKeyedArchiver.archivedData(withRootObject: object)
35 self.set(data, forKey: key)
40 extension UserDefaults {
42 subscript(key: DefaultKey<[NSSortDescriptor]>) -> [NSSortDescriptor] {
44 get { return keyedArchivedObject(forKey: key.rawValue) ?? [] }
45 set { self.setKeyedArchived(newValue, forKey: key.rawValue) }
48 subscript(key: DefaultKey<NSColor>) -> NSColor {
50 get { return keyedArchivedObject(forKey: key.rawValue) ?? key.alternative }
51 set { self.setKeyedArchived(newValue, forKey: key.rawValue) }
54 subscript(key: DefaultKey<Date>) -> Date {
56 get { return keyedArchivedObject(forKey: key.rawValue) ?? key.alternative }
57 set { self.setKeyedArchived(newValue, forKey: key.rawValue) }
63 extension UserDefaults {
65 subscript(key: DefaultKey<Debug.Level>) -> Debug.Level {
67 get { return Debug.Level(rawValue: self.integer(forKey: key.rawValue)) ?? key.alternative }
68 set { self.set(newValue.rawValue, forKey: key.rawValue) }
71 subscript(key: DefaultKey<FleetViewController.SakutekiCalclationSterategy>) -> FleetViewController.SakutekiCalclationSterategy {
73 get { return FleetViewController.SakutekiCalclationSterategy(rawValue: self.integer(forKey: key.rawValue)) ?? key.alternative }
74 set { self.set(newValue.rawValue, forKey: key.rawValue) }
77 subscript(key: DefaultKey<SlotItemWindowController.ShowType>) -> SlotItemWindowController.ShowType {
79 get { return SlotItemWindowController.ShowType(rawValue: self.integer(forKey: key.rawValue)) ?? key.alternative }
80 set { self.set(newValue.rawValue, forKey: key.rawValue) }
83 subscript(key: DefaultKey<BroserWindowController.FleetViewPosition>) -> BroserWindowController.FleetViewPosition {
85 get { return BroserWindowController.FleetViewPosition(rawValue: self.integer(forKey: key.rawValue)) ?? key.alternative }
86 set { self.set(newValue.rawValue, forKey: key.rawValue) }
89 subscript(key: DefaultKey<FleetViewController.ShipOrder>) -> FleetViewController.ShipOrder {
91 get { return FleetViewController.ShipOrder(rawValue: self.integer(forKey: key.rawValue)) ?? key.alternative }
92 set { self.set(newValue.rawValue, forKey: key.rawValue) }
95 subscript(key: DefaultKey<NSControl.ControlSize>) -> NSControl.ControlSize {
97 get { return NSControl.ControlSize(rawValue: UInt(self.integer(forKey: key.rawValue))) ?? key.alternative }
98 set { self.set(newValue.rawValue, forKey: key.rawValue) }