52 lines
1.3 KiB
Swift
52 lines
1.3 KiB
Swift
//
|
|
// Settings.swift
|
|
// App
|
|
//
|
|
// Created by James Magahern on 3/9/21.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
@propertyWrapper
|
|
public struct SettingProperty<T: RawRepresentable>
|
|
{
|
|
public var key: String
|
|
public var defaultValue: T
|
|
public init(wrappedValue: T, key: String) {
|
|
self.key = key
|
|
self.defaultValue = wrappedValue
|
|
}
|
|
|
|
public var wrappedValue: T {
|
|
get {
|
|
guard let rawValue = UserDefaults.standard.object(forKey: key) as? T.RawValue else { return defaultValue }
|
|
return T(rawValue: rawValue) ?? defaultValue
|
|
}
|
|
set {
|
|
UserDefaults.standard.setValue(newValue.rawValue, forKey: key)
|
|
}
|
|
}
|
|
}
|
|
|
|
class Settings
|
|
{
|
|
static let shared = Settings()
|
|
|
|
public enum SearchProviderSetting: String, CaseIterable {
|
|
case google = "Google"
|
|
case duckduckgo = "DuckDuckGo"
|
|
case searxnor = "Searx.nor"
|
|
|
|
func provider() -> SearchProvider {
|
|
switch self {
|
|
case .google: return SearchProvider.google
|
|
case .duckduckgo: return SearchProvider.duckduckgo
|
|
case .searxnor: return SearchProvider.searxnor
|
|
}
|
|
}
|
|
}
|
|
|
|
@SettingProperty(key: "searchProvider")
|
|
public var searchProvider: SearchProviderSetting = .searxnor
|
|
}
|