From 7314452b76244a896ffcc7debd31d9576128851a Mon Sep 17 00:00:00 2001 From: Tom Lokhorst Date: Fri, 5 Aug 2016 15:12:50 +0200 Subject: [PATCH] Swift 3 converter --- SegueManager.xcodeproj/project.pbxproj | 11 ++++++--- .../xcschemes/SegueManager OSX.xcscheme | 2 +- .../xcschemes/SegueManager iOS.xcscheme | 2 +- src/ios/SegueManager+Rswift.swift | 8 +++---- src/ios/SegueManager.swift | 24 +++++++++---------- src/ios/ViewControllers.swift | 22 ++++++++--------- 6 files changed, 37 insertions(+), 32 deletions(-) diff --git a/SegueManager.xcodeproj/project.pbxproj b/SegueManager.xcodeproj/project.pbxproj index 7b4cab6..5816484 100644 --- a/SegueManager.xcodeproj/project.pbxproj +++ b/SegueManager.xcodeproj/project.pbxproj @@ -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 */ @@ -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; @@ -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; @@ -336,6 +337,7 @@ PRODUCT_NAME = SegueManager; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -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; }; @@ -393,6 +397,7 @@ PRODUCT_NAME = SegueManager; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; }; name = Release; }; diff --git a/SegueManager.xcodeproj/xcshareddata/xcschemes/SegueManager OSX.xcscheme b/SegueManager.xcodeproj/xcshareddata/xcschemes/SegueManager OSX.xcscheme index 7016d43..7430719 100644 --- a/SegueManager.xcodeproj/xcshareddata/xcschemes/SegueManager OSX.xcscheme +++ b/SegueManager.xcodeproj/xcshareddata/xcschemes/SegueManager OSX.xcscheme @@ -1,6 +1,6 @@ ( - segueIdentifier: StoryboardSegueIdentifier, - handler: TypedStoryboardSegueInfo -> Void) + _ segueIdentifier: StoryboardSegueIdentifier, + handler: (TypedStoryboardSegueInfo) -> Void) { segueManager.performSegue(segueIdentifier.identifier) { segue in @@ -31,7 +31,7 @@ extension SeguePerformer { } public func performSegue( - segueIdentifier: StoryboardSegueIdentifier) + _ segueIdentifier: StoryboardSegueIdentifier) { performSegue(segueIdentifier) { _ in } } @@ -39,7 +39,7 @@ extension SeguePerformer { extension StoryboardSegue where Source : SeguePerformer { public func performSegue( - handler: TypedStoryboardSegueInfo -> Void) + _ handler: (TypedStoryboardSegueInfo) -> Void) { self.sourceViewController.segueManager.performSegue(self.identifier.identifier) { segue in diff --git a/src/ios/SegueManager.swift b/src/ios/SegueManager.swift index 51cdf92..16b4b35 100644 --- a/src/ios/SegueManager.swift +++ b/src/ios/SegueManager.swift @@ -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, @@ -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(identifier: String, handler: T -> Void) { + public func performSegue(_ identifier: String, handler: (T) -> Void) { performSegue(identifier) { segue in if let vc: T = viewControllerOfType(segue.destinationViewController) { handler(vc) @@ -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" @@ -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(viewController: UIViewController?) -> T? { +private func viewControllerOfType(_ viewController: UIViewController?) -> T? { if let vc = viewController as? T { return vc } diff --git a/src/ios/ViewControllers.swift b/src/ios/ViewControllers.swift index a0bcac4..73fa449 100644 --- a/src/ios/ViewControllers.swift +++ b/src/ios/ViewControllers.swift @@ -13,15 +13,15 @@ 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(identifier: String, handler: T -> Void) { + public func performSegue(_ identifier: String, handler: (T) -> Void) { segueManager.performSegue(identifier, handler: handler) } - public func performSegue(identifier: String) { + public func performSegue(_ identifier: String) { segueManager.performSegue(identifier) } } @@ -29,31 +29,31 @@ extension SeguePerformer { 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) } }