organize storyboard and view controller instantiation

This commit is contained in:
Ivan Smolin 2016-10-20 13:41:14 +03:00
parent 67bfde33db
commit 965ac55309
3 changed files with 81 additions and 0 deletions

View File

@ -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 = "<group>"; };
780D23421DA412470084620D /* CGImage+Alpha.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGImage+Alpha.swift"; sourceTree = "<group>"; };
780D23451DA416F80084620D /* CGContext+Initializers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGContext+Initializers.swift"; sourceTree = "<group>"; };
783423691DB8D0E100A79643 /* StoryboardProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoryboardProtocol.swift; sourceTree = "<group>"; };
7834236F1DB8D15800A79643 /* StoryboardProtocol+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "StoryboardProtocol+Extensions.swift"; sourceTree = "<group>"; };
7837F60E1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EstimatedViewHeightProtocol.swift; sourceTree = "<group>"; };
786D78E71D53C378006B2CEA /* AlamofireRequest+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AlamofireRequest+Extensions.swift"; sourceTree = "<group>"; };
786D78EB1D53C46E006B2CEA /* AlamofireManager+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AlamofireManager+Extensions.swift"; sourceTree = "<group>"; };
@ -197,6 +201,15 @@
path = CGContext;
sourceTree = "<group>";
};
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 = "<group>";
@ -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 */,

View File

@ -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
}

View File

@ -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)
}
}