diff --git a/MiniScanner.xcodeproj/project.pbxproj b/MiniScanner.xcodeproj/project.pbxproj index 62636d0d8764c1370d4599804c3d35dd93639bfc..1acca28effaf8b1d89bcfe1434b9138194f24670 100644 --- a/MiniScanner.xcodeproj/project.pbxproj +++ b/MiniScanner.xcodeproj/project.pbxproj @@ -172,6 +172,10 @@ 53F21FA12C1377B900172BFC /* Tajawal-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 53F21F9A2C1377B900172BFC /* Tajawal-Black.ttf */; }; 672C46442C47B1F300497EF0 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 672C46432C47B1F300497EF0 /* Localizable.xcstrings */; }; 672C464A2C47BD8800497EF0 /* String+StringKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46492C47BD8800497EF0 /* String+StringKeys.swift */; }; + 672C46622C47C74300497EF0 /* DependencyInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46612C47C74300497EF0 /* DependencyInjector.swift */; }; + 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 */; }; 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 */; }; @@ -394,6 +398,10 @@ 53F21F9A2C1377B900172BFC /* Tajawal-Black.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Tajawal-Black.ttf"; sourceTree = "<group>"; }; 672C46432C47B1F300497EF0 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; }; 672C46492C47BD8800497EF0 /* String+StringKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+StringKeys.swift"; sourceTree = "<group>"; }; + 672C46612C47C74300497EF0 /* DependencyInjector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DependencyInjector.swift; sourceTree = "<group>"; }; + 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>"; }; 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; }; @@ -922,6 +930,17 @@ path = Localization; sourceTree = "<group>"; }; + 672C46602C47C70F00497EF0 /* DependencyInjection */ = { + isa = PBXGroup; + children = ( + 672C46612C47C74300497EF0 /* DependencyInjector.swift */, + 672C46632C47C74800497EF0 /* Provide.swift */, + 672C46652C47C74C00497EF0 /* Inject.swift */, + 672C46672C47C75100497EF0 /* Clear.swift */, + ); + path = DependencyInjection; + sourceTree = "<group>"; + }; 98E49D3F46C8E62718825860 /* Pods */ = { isa = PBXGroup; children = ( @@ -952,6 +971,7 @@ EC0CF1FC254D8BBF00888722 /* MiniScanner */ = { isa = PBXGroup; children = ( + 672C46602C47C70F00497EF0 /* DependencyInjection */, EC702548254E1F9F00BE1958 /* Managers */, 535983F02C144E79003EB6ED /* Helpers */, EC8A9B0A254DC2FD00F9AF99 /* Extensions */, @@ -1268,6 +1288,7 @@ 539996922C27130000671340 /* ConstraintLayoutGuide.swift in Sources */, 539996A32C27130000671340 /* ConstraintLayoutSupportDSL.swift in Sources */, 53D9D1C52C1AF521004D1C1C /* MyExtention.swift in Sources */, + 672C46662C47C74C00497EF0 /* Inject.swift in Sources */, 535983F22C144E87003EB6ED /* Keys.swift in Sources */, 539996962C27130000671340 /* ConstraintOffsetTarget.swift in Sources */, EC70252C254E066400BE1958 /* SettingsViewController.swift in Sources */, @@ -1281,6 +1302,7 @@ 53014FAA2C11A8E80071CE39 /* Quadrilateral.swift in Sources */, 539996832C27130000671340 /* ConstraintMakerPriortizable.swift in Sources */, 5399969E2C27130000671340 /* Debugging.swift in Sources */, + 672C46682C47C75100497EF0 /* Clear.swift in Sources */, 5399968E2C27130000671340 /* ConstraintMakerRelatable+Extensions.swift in Sources */, 539996512C26E86700671340 /* DefaultValues.m in Sources */, 53014FA42C11A8E80071CE39 /* EditScanViewController.swift in Sources */, @@ -1301,6 +1323,7 @@ 535983EF2C142C9F003EB6ED /* Localization.swift in Sources */, 539996892C27130000671340 /* ConstraintDSL.swift in Sources */, 539996952C27130000671340 /* ConstraintConstantTarget.swift in Sources */, + 672C46622C47C74300497EF0 /* DependencyInjector.swift in Sources */, 539996902C27130000671340 /* UILayoutSupport+Extensions.swift in Sources */, 53014F992C11A8E80071CE39 /* CGPoint+Utils.swift in Sources */, 53E7D3392C1B00880025A1D3 /* FSPageViewLayout.swift in Sources */, @@ -1318,6 +1341,7 @@ ECE9BBAA254E295900D45E43 /* Date+Extensions.swift in Sources */, 53014FA92C11A8E80071CE39 /* QuadrilateralView.swift in Sources */, 539996802C27130000671340 /* ConstraintMultiplierTarget.swift in Sources */, + 672C46642C47C74800497EF0 /* Provide.swift in Sources */, 53CD5F562C1503150010424B /* BMViewController.swift in Sources */, 539996822C27130000671340 /* ConstraintDescription.swift in Sources */, EC702546254E1E9E00BE1958 /* WalkthroughModel.swift in Sources */, diff --git a/MiniScanner/DependencyInjection/Clear.swift b/MiniScanner/DependencyInjection/Clear.swift new file mode 100644 index 0000000000000000000000000000000000000000..b0b6a0a4cc7059201c8cefa3d020823b95fdf9e0 --- /dev/null +++ b/MiniScanner/DependencyInjection/Clear.swift @@ -0,0 +1,19 @@ +// +// Clear.swift +// MiniScanner +// +// Created by Mustafa Merza on 7/17/24. +// Copyright © 2024 AppsNectar. All rights reserved. +// + +import Foundation + +@propertyWrapper struct Clear<T> { + + var wrappedValue: T + + init() { + self.wrappedValue = DependencyInjector.resolve() + DependencyInjector.clear(dependency: wrappedValue) + } +} diff --git a/MiniScanner/DependencyInjection/DependencyInjector.swift b/MiniScanner/DependencyInjection/DependencyInjector.swift new file mode 100644 index 0000000000000000000000000000000000000000..350a6a0a4b2b87911efdff530d4863a628825389 --- /dev/null +++ b/MiniScanner/DependencyInjection/DependencyInjector.swift @@ -0,0 +1,29 @@ +// +// DependencyInjector.swift +// MiniScanner +// +// Created by Mustafa Merza on 7/17/24. +// Copyright © 2024 AppsNectar. All rights reserved. +// + +import Foundation + +struct DependencyInjector { + + private static var dependencyList: [String: Any] = [:] + + static func resolve<T>() -> T { + guard let t = dependencyList[String(describing: T.self)] as? T else { + fatalError("No provider registerd for type: \(T.self)") + } + return t + } + + static func register<T>(dependency: T) { + dependencyList[String(describing: T.self)] = dependency + } + + static func clear<T>(dependency: T) { + dependencyList.removeValue(forKey: String(describing: T.self)) + } +} diff --git a/MiniScanner/DependencyInjection/Inject.swift b/MiniScanner/DependencyInjection/Inject.swift new file mode 100644 index 0000000000000000000000000000000000000000..814c260196f925a6bc7831d1c2e1c08acfcd7ade --- /dev/null +++ b/MiniScanner/DependencyInjection/Inject.swift @@ -0,0 +1,18 @@ +// +// Inject.swift +// MiniScanner +// +// Created by Mustafa Merza on 7/17/24. +// Copyright © 2024 AppsNectar. All rights reserved. +// + +import Foundation + +@propertyWrapper struct Inject<T> { + + var wrappedValue: T + + init() { + self.wrappedValue = DependencyInjector.resolve() + } +} diff --git a/MiniScanner/DependencyInjection/Provide.swift b/MiniScanner/DependencyInjection/Provide.swift new file mode 100644 index 0000000000000000000000000000000000000000..80046e2bd09dadcd75e333201adafc11e3db4bdc --- /dev/null +++ b/MiniScanner/DependencyInjection/Provide.swift @@ -0,0 +1,19 @@ +// +// Provide.swift +// MiniScanner +// +// Created by Mustafa Merza on 7/17/24. +// Copyright © 2024 AppsNectar. All rights reserved. +// + +import Foundation + +@propertyWrapper struct Provide<T> { + + var wrappedValue: T + + init(wrappedValue: T) { + self.wrappedValue = wrappedValue + DependencyInjector.register(dependency: wrappedValue) + } +}