Skip to content

Commit

Permalink
Swift 3 converter
Browse files Browse the repository at this point in the history
  • Loading branch information
tomlokhorst committed Aug 5, 2016
1 parent 17c61a9 commit 7314452
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 32 deletions.
11 changes: 8 additions & 3 deletions SegueManager.xcodeproj/project.pbxproj
Expand Up @@ -10,7 +10,7 @@
E24EC7E61BB1605B009AFFB3 /* SegueManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E24EC7E51BB1605B009AFFB3 /* SegueManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
E24EC7FE1BB16AC0009AFFB3 /* SegueManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E24EC7FD1BB16AC0009AFFB3 /* SegueManager.swift */; };
E24EC8011BB16AD3009AFFB3 /* SegueManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E24EC7FF1BB16ACB009AFFB3 /* SegueManager.swift */; };
E28883181C1342C500AE2B8D /* SegueManager+Rswift.swift in Sources */ = {isa = PBXBuildFile; fileRef = E28883171C1342C500AE2B8D /* SegueManager+Rswift.swift */; };
E2A320DF1D54C8310027AF84 /* SegueManager+Rswift.swift in Sources */ = {isa = PBXBuildFile; fileRef = E28883171C1342C500AE2B8D /* SegueManager+Rswift.swift */; };
E2AD28BC1C541C5600C1D989 /* ViewControllers.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2AD28BB1C541C5600C1D989 /* ViewControllers.swift */; };
/* End PBXBuildFile section */

Expand Down Expand Up @@ -162,11 +162,12 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0700;
LastUpgradeCheck = 0800;
ORGANIZATIONNAME = nonstrict;
TargetAttributes = {
E24EC7E11BB1605B009AFFB3 = {
CreatedOnToolsVersion = 7.0;
LastSwiftMigration = 0800;
};
E24EC7F11BB16669009AFFB3 = {
CreatedOnToolsVersion = 7.0;
Expand Down Expand Up @@ -213,8 +214,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E28883181C1342C500AE2B8D /* SegueManager+Rswift.swift in Sources */,
E24EC7FE1BB16AC0009AFFB3 /* SegueManager.swift in Sources */,
E2A320DF1D54C8310027AF84 /* SegueManager+Rswift.swift in Sources */,
E2AD28BC1C541C5600C1D989 /* ViewControllers.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down Expand Up @@ -336,6 +337,7 @@
PRODUCT_NAME = SegueManager;
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0;
};
name = Debug;
};
Expand All @@ -353,6 +355,8 @@
PRODUCT_BUNDLE_IDENTIFIER = com.nonstrict.SegueManager;
PRODUCT_NAME = SegueManager;
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 3.0;
};
name = Release;
};
Expand Down Expand Up @@ -393,6 +397,7 @@
PRODUCT_NAME = SegueManager;
SDKROOT = macosx;
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
};
name = Release;
};
Expand Down
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0800"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0800"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
8 changes: 4 additions & 4 deletions src/ios/SegueManager+Rswift.swift
Expand Up @@ -11,8 +11,8 @@ import Rswift

extension SeguePerformer {
public func performSegue<Segue, Destination>(
segueIdentifier: StoryboardSegueIdentifier<Segue, Self, Destination>,
handler: TypedStoryboardSegueInfo<Segue, Self, Destination> -> Void)
_ segueIdentifier: StoryboardSegueIdentifier<Segue, Self, Destination>,
handler: (TypedStoryboardSegueInfo<Segue, Self, Destination>) -> Void)
{
segueManager.performSegue(segueIdentifier.identifier) { segue in

Expand All @@ -31,15 +31,15 @@ extension SeguePerformer {
}

public func performSegue<Segue, Destination>(
segueIdentifier: StoryboardSegueIdentifier<Segue, Self, Destination>)
_ segueIdentifier: StoryboardSegueIdentifier<Segue, Self, Destination>)
{
performSegue(segueIdentifier) { _ in }
}
}

extension StoryboardSegue where Source : SeguePerformer {
public func performSegue(
handler: TypedStoryboardSegueInfo<Segue, Source, Destination> -> Void)
_ handler: (TypedStoryboardSegueInfo<Segue, Source, Destination>) -> Void)
{
self.sourceViewController.segueManager.performSegue(self.identifier.identifier) { segue in

Expand Down
24 changes: 12 additions & 12 deletions src/ios/SegueManager.swift
Expand Up @@ -15,12 +15,12 @@ private struct SourceLocation {
}

public class SegueManager {
typealias Handler = UIStoryboardSegue -> Void
typealias Handler = (UIStoryboardSegue) -> Void

private unowned let viewController: UIViewController
private let sourceLocation: SourceLocation
private var handlers = [String: Handler]()
private var timers = [String: NSTimer]()
private var timers = [String: Timer]()

public init(
viewController: UIViewController,
Expand All @@ -33,14 +33,14 @@ public class SegueManager {
self.sourceLocation = SourceLocation(file: file, line: line, column: column, function: function)
}

public func performSegue(identifier: String, handler: UIStoryboardSegue -> Void) {
public func performSegue(_ identifier: String, handler: (UIStoryboardSegue) -> Void) {
handlers[identifier] = handler
timers[identifier] = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: #selector(SegueManager.timeout(_:)), userInfo: identifier, repeats: false)
timers[identifier] = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(SegueManager.timeout(_:)), userInfo: identifier, repeats: false)

viewController.performSegueWithIdentifier(identifier, sender: viewController)
viewController.performSegue(withIdentifier: identifier, sender: viewController)
}

public func performSegue<T>(identifier: String, handler: T -> Void) {
public func performSegue<T>(_ identifier: String, handler: (T) -> Void) {
performSegue(identifier) { segue in
if let vc: T = viewControllerOfType(segue.destinationViewController) {
handler(vc)
Expand All @@ -56,24 +56,24 @@ public class SegueManager {
}
}

public func performSegue(identifier: String) {
public func performSegue(_ identifier: String) {
self.performSegue(identifier, handler: { _ in })
}

public func prepareForSegue(segue: UIStoryboardSegue) {
public func prepare(for segue: UIStoryboardSegue) {
if let segueIdentifier = segue.identifier {
timers[segueIdentifier]?.invalidate()
timers.removeValueForKey(segueIdentifier)
timers.removeValue(forKey: segueIdentifier)

if let handler = handlers[segueIdentifier] {
handler(segue)

handlers.removeValueForKey(segueIdentifier)
handlers.removeValue(forKey: segueIdentifier)
}
}
}

@objc private func timeout(timer: NSTimer) {
@objc private func timeout(_ timer: Timer) {
let segueIdentifier = timer.userInfo as? String ?? ""
let message = "SegueManager created at \(sourceLocation.file):\(sourceLocation.line)\n"
+ "Performed segue `\(segueIdentifier)', but handler not called.\n"
Expand All @@ -86,7 +86,7 @@ public class SegueManager {

// Smartly select a view controller of a specific type
// For navigation and tabbar controllers, select the obvious view controller
private func viewControllerOfType<T>(viewController: UIViewController?) -> T? {
private func viewControllerOfType<T>(_ viewController: UIViewController?) -> T? {
if let vc = viewController as? T {
return vc
}
Expand Down
22 changes: 11 additions & 11 deletions src/ios/ViewControllers.swift
Expand Up @@ -13,47 +13,47 @@ public protocol SeguePerformer {
}

extension SeguePerformer {
public func performSegue(identifier: String, handler: UIStoryboardSegue -> Void) {
public func performSegue(_ identifier: String, handler: (UIStoryboardSegue) -> Void) {
segueManager.performSegue(identifier, handler: handler)
}

public func performSegue<T>(identifier: String, handler: T -> Void) {
public func performSegue<T>(_ identifier: String, handler: (T) -> Void) {
segueManager.performSegue(identifier, handler: handler)
}

public func performSegue(identifier: String) {
public func performSegue(_ identifier: String) {
segueManager.performSegue(identifier)
}
}

public class SegueManagerViewController : UIViewController, SeguePerformer {
public lazy var segueManager: SegueManager = { return SegueManager(viewController: self) }()

override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
segueManager.prepareForSegue(segue)
override public func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
segueManager.prepare(for: segue)
}
}

public class SegueManagerCollectionViewController : UICollectionViewController, SeguePerformer {
public lazy var segueManager: SegueManager = { return SegueManager(viewController: self) }()

override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
segueManager.prepareForSegue(segue)
override public func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
segueManager.prepare(for: segue)
}
}

public class SegueManagerNavigationController : UINavigationController, SeguePerformer {
public lazy var segueManager: SegueManager = { return SegueManager(viewController: self) }()

override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
segueManager.prepareForSegue(segue)
override public func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
segueManager.prepare(for: segue)
}
}

public class SegueManagerTableViewController : UITableViewController, SeguePerformer {
public lazy var segueManager: SegueManager = { return SegueManager(viewController: self) }()

override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
segueManager.prepareForSegue(segue)
override public func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
segueManager.prepare(for: segue)
}
}

0 comments on commit 7314452

Please sign in to comment.