Skip to content

Commit 33d5754

Browse files
committed
Add StoryboardViewControllerResourceType
Including a helper method: instantiateViewController
1 parent a560db9 commit 33d5754

File tree

3 files changed

+62
-2
lines changed

3 files changed

+62
-2
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//
2+
// StoryboardViewControllerResource.swift
3+
// R.swift.Library
4+
//
5+
// Created by Mathijs Kadijk on 13-03-16.
6+
// Copyright © 2016 Mathijs Kadijk. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
public protocol StoryboardViewControllerResourceType: IdentifierType {
12+
typealias ViewControllerType
13+
}
14+
15+
public struct StoryboardViewControllerResource<ViewController>: StoryboardViewControllerResourceType {
16+
public typealias ViewControllerType = ViewController
17+
18+
/// Storyboard identifier of this view controller
19+
public let identifier: String
20+
21+
public init(identifier: String) {
22+
self.identifier = identifier
23+
}
24+
}
25+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//
2+
// UIViewController+StoryboardViewControllerResource.swift
3+
// R.swift.Library
4+
//
5+
// Created by Mathijs Kadijk on 13-03-16.
6+
// Copyright © 2016 Mathijs Kadijk. All rights reserved.
7+
//
8+
9+
import Foundation
10+
import UIKit
11+
12+
public extension UIStoryboard {
13+
/**
14+
Instantiates and returns the view controller with the specified resource (R.storyboard.*.*).
15+
16+
- parameter resource: An resource (R.storyboard.*.*) that uniquely identifies the view controller in the storyboard file. If the specified resource does not exist in the storyboard file, this method raises an exception.
17+
18+
- returns: The view controller corresponding to the specified resource (R.storyboard.*.*). If no view controller is associated, this method throws an exception.
19+
*/
20+
public func instantiateViewController<ViewControllerResource: StoryboardViewControllerResourceType>(resource: ViewControllerResource) -> ViewControllerResource.ViewControllerType? {
21+
return instantiateViewControllerWithIdentifier(resource.identifier) as? ViewControllerResource.ViewControllerType
22+
}
23+
}

R.swift.Library.xcodeproj/project.pbxproj

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
806E69BA1C42BDE000DE3A8B /* UIViewController+NibResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D543F9C71C14995800D16A0C /* UIViewController+NibResource.swift */; };
2828
806E69BB1C42BDE000DE3A8B /* UIViewController+StoryboardSegueIdentifierProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = D543F9C91C14998800D16A0C /* UIViewController+StoryboardSegueIdentifierProtocol.swift */; };
2929
806E69BC1C42BDE300DE3A8B /* RswiftTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D592465D1C117A55007F94C7 /* RswiftTests.swift */; };
30+
D51335271C959DF20014C9D4 /* StoryboardViewControllerResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D51335261C959DF20014C9D4 /* StoryboardViewControllerResource.swift */; };
31+
D51335291C95A79B0014C9D4 /* UIStoryboard+StoryboardViewControllerResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D51335281C95A79B0014C9D4 /* UIStoryboard+StoryboardViewControllerResource.swift */; };
32+
D513352A1C95B7510014C9D4 /* StoryboardViewControllerResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D51335261C959DF20014C9D4 /* StoryboardViewControllerResource.swift */; };
33+
D513352B1C95B7620014C9D4 /* UIStoryboard+StoryboardViewControllerResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D51335281C95A79B0014C9D4 /* UIStoryboard+StoryboardViewControllerResource.swift */; };
3034
D53F19241C229D7200AE2FAD /* Validatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D53F19231C229D7200AE2FAD /* Validatable.swift */; };
3135
D543F9BB1C1497EB00D16A0C /* Identifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = D543F9BA1C1497EB00D16A0C /* Identifier.swift */; };
3236
D543F9BD1C14980600D16A0C /* ReuseIdentifierProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = D543F9BC1C14980600D16A0C /* ReuseIdentifierProtocol.swift */; };
@@ -77,6 +81,8 @@
7781
/* Begin PBXFileReference section */
7882
806E69921C42BD9C00DE3A8B /* Rswift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Rswift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
7983
806E699B1C42BD9C00DE3A8B /* RswiftTests-tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "RswiftTests-tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
84+
D51335261C959DF20014C9D4 /* StoryboardViewControllerResource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoryboardViewControllerResource.swift; sourceTree = "<group>"; };
85+
D51335281C95A79B0014C9D4 /* UIStoryboard+StoryboardViewControllerResource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIStoryboard+StoryboardViewControllerResource.swift"; sourceTree = "<group>"; };
8086
D53F19231C229D7200AE2FAD /* Validatable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Validatable.swift; sourceTree = "<group>"; };
8187
D543F9BA1C1497EB00D16A0C /* Identifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Identifier.swift; sourceTree = "<group>"; };
8288
D543F9BC1C14980600D16A0C /* ReuseIdentifierProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReuseIdentifierProtocol.swift; sourceTree = "<group>"; };
@@ -148,12 +154,13 @@
148154
D543F9CE1C149C0A00D16A0C /* TypedStoryboardSegueInfo+UIStoryboardSegue.swift */,
149155
D543F9C51C14992000D16A0C /* UICollectionView+ReuseIdentifierProtocol.swift */,
150156
D57E1EB41C3D774000DDA68F /* UIFont+FontResource.swift */,
157+
D553F5861C44170E00885232 /* UIImage+ImageResource.swift */,
151158
D5588CAA1C3F9DBE00912F97 /* UINib+NibResource.swift */,
152159
D57E1EBA1C3E4C4300DDA68F /* UIStoryboard+StoryboardResource.swift */,
153160
D543F9C31C1498FB00D16A0C /* UITableView+ReuseIdentifierProtocol.swift */,
154161
D543F9C71C14995800D16A0C /* UIViewController+NibResource.swift */,
155162
D543F9C91C14998800D16A0C /* UIViewController+StoryboardSegueIdentifierProtocol.swift */,
156-
D553F5861C44170E00885232 /* UIImage+ImageResource.swift */,
163+
D51335281C95A79B0014C9D4 /* UIStoryboard+StoryboardViewControllerResource.swift */,
157164
);
158165
path = UIKit;
159166
sourceTree = "<group>";
@@ -164,12 +171,13 @@
164171
D5E435AC1C3D00770091090C /* FileResource.swift */,
165172
D57E1EB21C3D762300DDA68F /* FontResource.swift */,
166173
D543F9BA1C1497EB00D16A0C /* Identifier.swift */,
174+
D553F5841C44157000885232 /* ImageResource.swift */,
167175
D543F9C01C14984300D16A0C /* NibResource.swift */,
168176
D543F9BC1C14980600D16A0C /* ReuseIdentifierProtocol.swift */,
169177
D57E1EB61C3E482A00DDA68F /* StoryboardResource.swift */,
170178
D543F9BE1C14983100D16A0C /* StoryboardSegueIdentifierProtocol.swift */,
179+
D51335261C959DF20014C9D4 /* StoryboardViewControllerResource.swift */,
171180
D53F19231C229D7200AE2FAD /* Validatable.swift */,
172-
D553F5841C44157000885232 /* ImageResource.swift */,
173181
);
174182
path = Core;
175183
sourceTree = "<group>";
@@ -398,6 +406,7 @@
398406
buildActionMask = 2147483647;
399407
files = (
400408
D5728B311C4D541200E38168 /* ImageResource.swift in Sources */,
409+
D513352B1C95B7620014C9D4 /* UIStoryboard+StoryboardViewControllerResource.swift in Sources */,
401410
806E69AD1C42BDDA00DE3A8B /* ReuseIdentifierProtocol.swift in Sources */,
402411
806E69B61C42BDE000DE3A8B /* UINib+NibResource.swift in Sources */,
403412
806E69AA1C42BDDA00DE3A8B /* FontResource.swift in Sources */,
@@ -410,6 +419,7 @@
410419
806E69BB1C42BDE000DE3A8B /* UIViewController+StoryboardSegueIdentifierProtocol.swift in Sources */,
411420
806E69B21C42BDE000DE3A8B /* StoryboardResourceWithInitialController+UIKit.swift in Sources */,
412421
D5728B331C4D541D00E38168 /* UIImage+ImageResource.swift in Sources */,
422+
D513352A1C95B7510014C9D4 /* StoryboardViewControllerResource.swift in Sources */,
413423
806E69AF1C42BDDA00DE3A8B /* StoryboardSegueIdentifierProtocol.swift in Sources */,
414424
806E69AB1C42BDDA00DE3A8B /* Identifier.swift in Sources */,
415425
806E69B01C42BDDA00DE3A8B /* Validatable.swift in Sources */,
@@ -434,6 +444,7 @@
434444
buildActionMask = 2147483647;
435445
files = (
436446
D543F9CA1C14998800D16A0C /* UIViewController+StoryboardSegueIdentifierProtocol.swift in Sources */,
447+
D51335291C95A79B0014C9D4 /* UIStoryboard+StoryboardViewControllerResource.swift in Sources */,
437448
D5E435AD1C3D00770091090C /* FileResource.swift in Sources */,
438449
D543F9BB1C1497EB00D16A0C /* Identifier.swift in Sources */,
439450
D57E1EB71C3E482A00DDA68F /* StoryboardResource.swift in Sources */,
@@ -446,6 +457,7 @@
446457
D57E1EB51C3D774000DDA68F /* UIFont+FontResource.swift in Sources */,
447458
D5588CAB1C3F9DBE00912F97 /* UINib+NibResource.swift in Sources */,
448459
D553F5871C44170E00885232 /* UIImage+ImageResource.swift in Sources */,
460+
D51335271C959DF20014C9D4 /* StoryboardViewControllerResource.swift in Sources */,
449461
D543F9C61C14992000D16A0C /* UICollectionView+ReuseIdentifierProtocol.swift in Sources */,
450462
D543F9BF1C14983100D16A0C /* StoryboardSegueIdentifierProtocol.swift in Sources */,
451463
D543F9C81C14995800D16A0C /* UIViewController+NibResource.swift in Sources */,

0 commit comments

Comments
 (0)