From 5671a5941c4c0a9d584b6204ed6ef3469405f4e9 Mon Sep 17 00:00:00 2001 From: Mustafa Merza <mustafa.merza95@gmail.com> Date: Wed, 17 Jul 2024 14:55:47 +0300 Subject: [PATCH] - Added user defaults manager to be handle user defaults values. --- MiniScanner.xcodeproj/project.pbxproj | 16 ++++ .../UserDefaults/UserDefaultsKeys.swift | 14 ++++ .../UserDefaults/UserDefaultsManager.swift | 77 +++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 MiniScanner/Managers/UserDefaults/UserDefaultsKeys.swift create mode 100644 MiniScanner/Managers/UserDefaults/UserDefaultsManager.swift diff --git a/MiniScanner.xcodeproj/project.pbxproj b/MiniScanner.xcodeproj/project.pbxproj index 1acca28..72c2b10 100644 --- a/MiniScanner.xcodeproj/project.pbxproj +++ b/MiniScanner.xcodeproj/project.pbxproj @@ -176,6 +176,8 @@ 672C46642C47C74800497EF0 /* Provide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46632C47C74800497EF0 /* Provide.swift */; }; 672C46662C47C74C00497EF0 /* Inject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46652C47C74C00497EF0 /* Inject.swift */; }; 672C46682C47C75100497EF0 /* Clear.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46672C47C75100497EF0 /* Clear.swift */; }; + 672C468F2C47CB2000497EF0 /* UserDefaultsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C468E2C47CB2000497EF0 /* UserDefaultsManager.swift */; }; + 672C46912C47CB5D00497EF0 /* UserDefaultsKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46902C47CB5D00497EF0 /* UserDefaultsKeys.swift */; }; B827E5196CC419E773B843E1 /* Pods_MiniScanner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9A37DC9F9A8E3AF632DFB98 /* Pods_MiniScanner.framework */; }; EC0CF1FE254D8BBF00888722 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC0CF1FD254D8BBF00888722 /* AppDelegate.swift */; }; EC0CF200254D8BBF00888722 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC0CF1FF254D8BBF00888722 /* SceneDelegate.swift */; }; @@ -402,6 +404,8 @@ 672C46632C47C74800497EF0 /* Provide.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Provide.swift; sourceTree = "<group>"; }; 672C46652C47C74C00497EF0 /* Inject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Inject.swift; sourceTree = "<group>"; }; 672C46672C47C75100497EF0 /* Clear.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Clear.swift; sourceTree = "<group>"; }; + 672C468E2C47CB2000497EF0 /* UserDefaultsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsManager.swift; sourceTree = "<group>"; }; + 672C46902C47CB5D00497EF0 /* UserDefaultsKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsKeys.swift; sourceTree = "<group>"; }; E8AF4FB39674DF589D719DCF /* Pods-MiniScanner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MiniScanner.release.xcconfig"; path = "Target Support Files/Pods-MiniScanner/Pods-MiniScanner.release.xcconfig"; sourceTree = "<group>"; }; E9A37DC9F9A8E3AF632DFB98 /* Pods_MiniScanner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MiniScanner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EC0CF1FA254D8BBF00888722 /* MiniScanner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MiniScanner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -941,6 +945,15 @@ path = DependencyInjection; sourceTree = "<group>"; }; + 672C468D2C47CB0D00497EF0 /* UserDefaults */ = { + isa = PBXGroup; + children = ( + 672C468E2C47CB2000497EF0 /* UserDefaultsManager.swift */, + 672C46902C47CB5D00497EF0 /* UserDefaultsKeys.swift */, + ); + path = UserDefaults; + sourceTree = "<group>"; + }; 98E49D3F46C8E62718825860 /* Pods */ = { isa = PBXGroup; children = ( @@ -997,6 +1010,7 @@ EC702548254E1F9F00BE1958 /* Managers */ = { isa = PBXGroup; children = ( + 672C468D2C47CB0D00497EF0 /* UserDefaults */, EC8A9B0F254DC6DD00F9AF99 /* PDFManager.swift */, EC8A9B13254DC9D300F9AF99 /* LocalFileManager.swift */, ECD43ED525A7BA9500B5A3F2 /* ThemeManager.swift */, @@ -1303,6 +1317,7 @@ 539996832C27130000671340 /* ConstraintMakerPriortizable.swift in Sources */, 5399969E2C27130000671340 /* Debugging.swift in Sources */, 672C46682C47C75100497EF0 /* Clear.swift in Sources */, + 672C46912C47CB5D00497EF0 /* UserDefaultsKeys.swift in Sources */, 5399968E2C27130000671340 /* ConstraintMakerRelatable+Extensions.swift in Sources */, 539996512C26E86700671340 /* DefaultValues.m in Sources */, 53014FA42C11A8E80071CE39 /* EditScanViewController.swift in Sources */, @@ -1341,6 +1356,7 @@ ECE9BBAA254E295900D45E43 /* Date+Extensions.swift in Sources */, 53014FA92C11A8E80071CE39 /* QuadrilateralView.swift in Sources */, 539996802C27130000671340 /* ConstraintMultiplierTarget.swift in Sources */, + 672C468F2C47CB2000497EF0 /* UserDefaultsManager.swift in Sources */, 672C46642C47C74800497EF0 /* Provide.swift in Sources */, 53CD5F562C1503150010424B /* BMViewController.swift in Sources */, 539996822C27130000671340 /* ConstraintDescription.swift in Sources */, diff --git a/MiniScanner/Managers/UserDefaults/UserDefaultsKeys.swift b/MiniScanner/Managers/UserDefaults/UserDefaultsKeys.swift new file mode 100644 index 0000000..55662fb --- /dev/null +++ b/MiniScanner/Managers/UserDefaults/UserDefaultsKeys.swift @@ -0,0 +1,14 @@ +// +// UserDefaultsKeys.swift +// MiniScanner +// +// Created by Mustafa Merza on 7/17/24. +// Copyright © 2024 AppsNectar. All rights reserved. +// + +import Foundation + +enum UserDefaultsKeys: String { + + case appLanguage = "app_language" +} diff --git a/MiniScanner/Managers/UserDefaults/UserDefaultsManager.swift b/MiniScanner/Managers/UserDefaults/UserDefaultsManager.swift new file mode 100644 index 0000000..9976792 --- /dev/null +++ b/MiniScanner/Managers/UserDefaults/UserDefaultsManager.swift @@ -0,0 +1,77 @@ +// +// UserDefaultsManager.swift +// MiniScanner +// +// Created by Mustafa Merza on 7/17/24. +// Copyright © 2024 AppsNectar. All rights reserved. +// + +import Foundation + +protocol UserDefaultsManagerProtocol { + + func string(key: UserDefaultsKeys) -> String? + func bool(key: UserDefaultsKeys) -> Bool + func get<T: Codable>(key: UserDefaultsKeys) -> T? + + func set(value: String, key: UserDefaultsKeys) + func set(value: Bool, key: UserDefaultsKeys) + func set<T: Codable>(value: T?, key: UserDefaultsKeys) + + func clear(key: UserDefaultsKeys) +} + +class UserDefaultsManager: UserDefaultsManagerProtocol { + + private let userDefaults: UserDefaults = .standard + + func string(key: UserDefaultsKeys) -> String? { + userDefaults.string(forKey: key.rawValue) + } + + func bool(key: UserDefaultsKeys) -> Bool { + userDefaults.bool(forKey: key.rawValue) + } + + func set(value: String, key: UserDefaultsKeys) { + set(value: value as Any?, key: key) + } + + func set(value: Bool, key: UserDefaultsKeys) { + set(value: value as Any?, key: key) + } + + func get<T: Codable>(key: UserDefaultsKeys) -> T? { + var value: T? = nil + + if let data = get(key: key) as? Data { + value = try? JSONDecoder().decode(T.self, from: data) + } + + return value + } + + func set<T: Codable>(value: T?, key: UserDefaultsKeys) { + if let value { + + let data = try? JSONEncoder().encode(value) + set(value: data as Any?, key: key) + } + else { + set(value: value as Any?, key: key) + } + } + + func clear(key: UserDefaultsKeys) { + userDefaults.removeObject(forKey: key.rawValue) + } + + private func get(key: UserDefaultsKeys) -> Any? { + userDefaults.object(forKey: key.rawValue) + } + + private func set(value: Any?, key: UserDefaultsKeys) { + userDefaults.set(value, forKey: key.rawValue) + userDefaults.synchronize() + } +} -- GitLab