diff --git a/LeadKit/LeadKit.xcodeproj/project.pbxproj b/LeadKit/LeadKit.xcodeproj/project.pbxproj index b52f2fdd..abfc8b1f 100644 --- a/LeadKit/LeadKit.xcodeproj/project.pbxproj +++ b/LeadKit/LeadKit.xcodeproj/project.pbxproj @@ -11,6 +11,8 @@ 78011AB31D48B53600EA16A2 /* ApiRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78011AB21D48B53600EA16A2 /* ApiRequestParameters.swift */; }; 780D23431DA412470084620D /* CGImage+Alpha.swift in Sources */ = {isa = PBXBuildFile; fileRef = 780D23421DA412470084620D /* CGImage+Alpha.swift */; }; 780D23461DA416F80084620D /* CGContext+Initializers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 780D23451DA416F80084620D /* CGContext+Initializers.swift */; }; + 7834236A1DB8D0E100A79643 /* StoryboardProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 783423691DB8D0E100A79643 /* StoryboardProtocol.swift */; }; + 783423701DB8D15800A79643 /* StoryboardProtocol+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7834236F1DB8D15800A79643 /* StoryboardProtocol+Extensions.swift */; }; 7837F60F1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7837F60E1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift */; }; 786D78E81D53C378006B2CEA /* AlamofireRequest+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786D78E71D53C378006B2CEA /* AlamofireRequest+Extensions.swift */; }; 786D78EC1D53C46E006B2CEA /* AlamofireManager+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786D78EB1D53C46E006B2CEA /* AlamofireManager+Extensions.swift */; }; @@ -69,6 +71,8 @@ 78011AB21D48B53600EA16A2 /* ApiRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApiRequestParameters.swift; sourceTree = ""; }; 780D23421DA412470084620D /* CGImage+Alpha.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGImage+Alpha.swift"; sourceTree = ""; }; 780D23451DA416F80084620D /* CGContext+Initializers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGContext+Initializers.swift"; sourceTree = ""; }; + 783423691DB8D0E100A79643 /* StoryboardProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoryboardProtocol.swift; sourceTree = ""; }; + 7834236F1DB8D15800A79643 /* StoryboardProtocol+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "StoryboardProtocol+Extensions.swift"; sourceTree = ""; }; 7837F60E1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EstimatedViewHeightProtocol.swift; sourceTree = ""; }; 786D78E71D53C378006B2CEA /* AlamofireRequest+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AlamofireRequest+Extensions.swift"; sourceTree = ""; }; 786D78EB1D53C46E006B2CEA /* AlamofireManager+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AlamofireManager+Extensions.swift"; sourceTree = ""; }; @@ -197,6 +201,15 @@ path = CGContext; sourceTree = ""; }; + 7834236C1DB8D13E00A79643 /* StoryboardProtocol */ = { + isa = PBXGroup; + children = ( + 7834236F1DB8D15800A79643 /* StoryboardProtocol+Extensions.swift */, + ); + name = StoryboardProtocol; + path = LeadKit/StoryboardProtocol; + sourceTree = SOURCE_ROOT; + }; 786D78E61D53C355006B2CEA /* Alamofire */ = { isa = PBXGroup; children = ( @@ -314,6 +327,7 @@ 780D23411DA412330084620D /* CGImage */, 780D23441DA416E80084620D /* CGContext */, C372153938A7B7D327F55124 /* UIStoryboard */, + 7834236C1DB8D13E00A79643 /* StoryboardProtocol */, 78D4B5441DA64D31005B0764 /* UIViewController */, 786D78E61D53C355006B2CEA /* Alamofire */, ); @@ -332,6 +346,7 @@ 78CFEE501C5C45E500F50370 /* ViewModelProtocol.swift */, 787682F91CAD40C200532AB3 /* StaticEstimatedViewHeightProtocol.swift */, 7837F60E1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift */, + 783423691DB8D0E100A79643 /* StoryboardProtocol.swift */, ); path = Protocols; sourceTree = ""; @@ -558,9 +573,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 783423701DB8D15800A79643 /* StoryboardProtocol+Extensions.swift in Sources */, 7837F60F1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift in Sources */, 78CFEE541C5C45E500F50370 /* UIView+LoadFromNib.swift in Sources */, 78D4B5461DA64D49005B0764 /* UIViewController+DefaultStoryboardIdentifier.swift in Sources */, + 7834236A1DB8D0E100A79643 /* StoryboardProtocol.swift in Sources */, 78CFEE521C5C45E500F50370 /* UITableView+CellRegistration.swift in Sources */, 78B0FC7F1C6B2C4D00358B64 /* Log.swift in Sources */, 78D4B54A1DA64EAB005B0764 /* Any+TypeName.swift in Sources */, diff --git a/LeadKit/LeadKit/Protocols/StoryboardProtocol.swift b/LeadKit/LeadKit/Protocols/StoryboardProtocol.swift new file mode 100644 index 00000000..f26f6d5a --- /dev/null +++ b/LeadKit/LeadKit/Protocols/StoryboardProtocol.swift @@ -0,0 +1,33 @@ +// +// StoryboardProtocol.swift +// LeadKit +// +// Created by Ivan Smolin on 20/10/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import UIKit + +/** + * protocol which helps us organize storyboards and view controllers creation + */ +public protocol StoryboardProtocol { + + associatedtype StoryboardIdentifier: RawRepresentable + associatedtype ViewControllerIdentifier: RawRepresentable + + /** + - returns: storyboard identifier with associatedtype type + */ + static var storyboardIdentifier: StoryboardIdentifier { get } + + /** + method which instantiate UIViewControlle instance for specific view controller identifier + + - parameter _: object which represents view controller identifier + + - returns: UIViewController instance + */ + static func instantiateViewController(_: ViewControllerIdentifier) -> UIViewController + +} diff --git a/LeadKit/LeadKit/StoryboardProtocol/StoryboardProtocol+Extensions.swift b/LeadKit/LeadKit/StoryboardProtocol/StoryboardProtocol+Extensions.swift new file mode 100644 index 00000000..51c9a8c2 --- /dev/null +++ b/LeadKit/LeadKit/StoryboardProtocol/StoryboardProtocol+Extensions.swift @@ -0,0 +1,31 @@ +// +// StoryboardProtocol+Extensions.swift +// LeadKit +// +// Created by Ivan Smolin on 20/10/16. +// Copyright © 2016 Touch Instinct. All rights reserved. +// + +import UIKit + +public extension StoryboardProtocol where StoryboardIdentifier.RawValue == String, ViewControllerIdentifier.RawValue == String { + + /** + - returns: UIStoryboradInstance with StoryboardIdentifier name + */ + public static var uiStoryboard: UIStoryboard { + return UIStoryboard(name: storyboardIdentifier.rawValue, bundle: Bundle.main) + } + + /** + method for instantiating UIViewController from storyboard using view controller identifier + + - parameter _: object which represents view controller identifier + + - returns: UIViewController instance + */ + public static func instantiateViewController(_ viewController: ViewControllerIdentifier) -> UIViewController { + return uiStoryboard.instantiateViewController(withIdentifier: viewController.rawValue) + } + +}