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 { return nil }
19 return NSKeyedUnarchiver.unarchiveObject(with: data) as? T
22 private func setKeyedArchived(_ object: Any?, forKey key: String) {
24 guard let object = object else {
26 self.removeObject(forKey: key)
30 let data = NSKeyedArchiver.archivedData(withRootObject: object)
31 self.set(data, forKey: key)
36 extension UserDefaults {
38 subscript(key: DefaultKey<[NSSortDescriptor]>) -> [NSSortDescriptor] {
40 get { return keyedArchivedObject(forKey: key.rawValue) ?? [] }
41 set { self.setKeyedArchived(newValue, forKey: key.rawValue) }
44 subscript(key: DefaultKey<NSColor>) -> NSColor {
46 get { return keyedArchivedObject(forKey: key.rawValue) ?? key.alternative }
47 set { self.setKeyedArchived(newValue, forKey: key.rawValue) }
50 subscript(key: DefaultKey<Date>) -> Date {
52 get { return keyedArchivedObject(forKey: key.rawValue) ?? key.alternative }
53 set { self.setKeyedArchived(newValue, forKey: key.rawValue) }
59 extension UserDefaults {
61 subscript(key: DefaultKey<Debug.Level>) -> Debug.Level {
63 get { return Debug.Level(rawValue: self.integer(forKey: key.rawValue)) ?? key.alternative }
64 set { self.set(newValue.rawValue, forKey: key.rawValue) }
67 subscript(key: DefaultKey<FleetViewController.SakutekiCalclationSterategy>) -> FleetViewController.SakutekiCalclationSterategy {
69 get { return FleetViewController.SakutekiCalclationSterategy(rawValue: self.integer(forKey: key.rawValue)) ?? key.alternative }
70 set { self.set(newValue.rawValue, forKey: key.rawValue) }
73 subscript(key: DefaultKey<SlotItemWindowController.ShowType>) -> SlotItemWindowController.ShowType {
75 get { return SlotItemWindowController.ShowType(rawValue: self.integer(forKey: key.rawValue)) ?? key.alternative }
76 set { self.set(newValue.rawValue, forKey: key.rawValue) }
79 subscript(key: DefaultKey<BroserWindowController.FleetViewPosition>) -> BroserWindowController.FleetViewPosition {
81 get { return BroserWindowController.FleetViewPosition(rawValue: self.integer(forKey: key.rawValue)) ?? key.alternative }
82 set { self.set(newValue.rawValue, forKey: key.rawValue) }
85 subscript(key: DefaultKey<FleetViewController.ShipOrder>) -> FleetViewController.ShipOrder {
87 get { return FleetViewController.ShipOrder(rawValue: self.integer(forKey: key.rawValue)) ?? key.alternative }
88 set { self.set(newValue.rawValue, forKey: key.rawValue) }
91 subscript(key: DefaultKey<NSControl.ControlSize>) -> NSControl.ControlSize {
93 get { return NSControl.ControlSize(rawValue: UInt(self.integer(forKey: key.rawValue))) ?? key.alternative }
94 set { self.set(newValue.rawValue, forKey: key.rawValue) }