Skip to content

Commit 83b4e3b

Browse files
authored
Merge pull request #49 from hyperoslo/swift4
Migrate the project to Swift 4
2 parents ba37d38 + 77a1ede commit 83b4e3b

File tree

6 files changed

+83
-62
lines changed

6 files changed

+83
-62
lines changed

.swift-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.0
1+
4.0

Pages.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Pod::Spec.new do |s|
22
s.name = "Pages"
33
s.summary = "UIPageViewController made simple"
4-
s.version = "1.0.0"
4+
s.version = "2.0.0"
55
s.homepage = "https://github.com/hyperoslo/Pages"
66
s.license = 'MIT'
77
s.author = { "Hyper" => "ios@hyper.no" }

Pages.xcodeproj/project.pbxproj

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,12 @@
104104
isa = PBXProject;
105105
attributes = {
106106
LastSwiftUpdateCheck = 0720;
107-
LastUpgradeCheck = 0800;
107+
LastUpgradeCheck = 0900;
108108
ORGANIZATIONNAME = "Hyper Interaktiv AS";
109109
TargetAttributes = {
110110
D5DF754B1C401B1800BF1AB6 = {
111111
CreatedOnToolsVersion = 7.2;
112-
LastSwiftMigration = 0800;
112+
LastSwiftMigration = 0900;
113113
};
114114
};
115115
};
@@ -162,14 +162,20 @@
162162
CLANG_CXX_LIBRARY = "libc++";
163163
CLANG_ENABLE_MODULES = YES;
164164
CLANG_ENABLE_OBJC_ARC = YES;
165+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
165166
CLANG_WARN_BOOL_CONVERSION = YES;
167+
CLANG_WARN_COMMA = YES;
166168
CLANG_WARN_CONSTANT_CONVERSION = YES;
167169
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
168170
CLANG_WARN_EMPTY_BODY = YES;
169171
CLANG_WARN_ENUM_CONVERSION = YES;
170172
CLANG_WARN_INFINITE_RECURSION = YES;
171173
CLANG_WARN_INT_CONVERSION = YES;
174+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
175+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
172176
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
177+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
178+
CLANG_WARN_STRICT_PROTOTYPES = YES;
173179
CLANG_WARN_SUSPICIOUS_MOVE = YES;
174180
CLANG_WARN_UNREACHABLE_CODE = YES;
175181
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -212,14 +218,20 @@
212218
CLANG_CXX_LIBRARY = "libc++";
213219
CLANG_ENABLE_MODULES = YES;
214220
CLANG_ENABLE_OBJC_ARC = YES;
221+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
215222
CLANG_WARN_BOOL_CONVERSION = YES;
223+
CLANG_WARN_COMMA = YES;
216224
CLANG_WARN_CONSTANT_CONVERSION = YES;
217225
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
218226
CLANG_WARN_EMPTY_BODY = YES;
219227
CLANG_WARN_ENUM_CONVERSION = YES;
220228
CLANG_WARN_INFINITE_RECURSION = YES;
221229
CLANG_WARN_INT_CONVERSION = YES;
230+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
231+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
222232
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
233+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
234+
CLANG_WARN_STRICT_PROTOTYPES = YES;
223235
CLANG_WARN_SUSPICIOUS_MOVE = YES;
224236
CLANG_WARN_UNREACHABLE_CODE = YES;
225237
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -263,7 +275,8 @@
263275
PRODUCT_BUNDLE_IDENTIFIER = no.hyper.Pages;
264276
PRODUCT_NAME = Pages;
265277
SKIP_INSTALL = YES;
266-
SWIFT_VERSION = 3.0;
278+
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
279+
SWIFT_VERSION = 4.0;
267280
};
268281
name = Debug;
269282
};
@@ -282,7 +295,8 @@
282295
PRODUCT_BUNDLE_IDENTIFIER = no.hyper.Pages;
283296
PRODUCT_NAME = Pages;
284297
SKIP_INSTALL = YES;
285-
SWIFT_VERSION = 3.0;
298+
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
299+
SWIFT_VERSION = 4.0;
286300
};
287301
name = Release;
288302
};

Pages.xcodeproj/xcshareddata/xcschemes/Pages-iOS.xcscheme

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0800"
3+
LastUpgradeVersion = "0900"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"
@@ -26,6 +26,7 @@
2626
buildConfiguration = "Debug"
2727
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
2828
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29+
language = ""
2930
shouldUseLaunchSchemeArgsEnv = "YES">
3031
<Testables>
3132
</Testables>
@@ -36,6 +37,7 @@
3637
buildConfiguration = "Debug"
3738
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
3839
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
40+
language = ""
3941
launchStyle = "0"
4042
useCustomWorkingDirectory = "NO"
4143
ignoresPersistentStateOnLaunch = "NO"

Source/Array+Sugar.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
extension Array {
2-
32
func at(_ index: Int?) -> Element? {
43
if let index = index , index >= 0 && index < endIndex {
54
return self[index]

Source/PagesController.swift

Lines changed: 60 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,65 @@
11
import UIKit
22

33
@objc(HYPPagesControllerDelegate) public protocol PagesControllerDelegate {
4-
5-
func pageViewController(_ pageViewController: UIPageViewController, setViewController viewController: UIViewController, atPage page: Int)
4+
func pageViewController(_ pageViewController: UIPageViewController,
5+
setViewController viewController: UIViewController,
6+
atPage page: Int)
67
}
78

89
@objc(HYPPagesController) open class PagesController: UIPageViewController {
9-
10-
struct Dimensions {
10+
private struct Dimensions {
1111
static let bottomLineHeight: CGFloat = 1.0
1212
static let bottomLineSideMargin: CGFloat = 40.0
1313
static let bottomLineBottomMargin: CGFloat = 36.0
1414
}
1515

16-
open var startPage = 0
17-
open var setNavigationTitle = true
16+
public var startPage = 0
17+
public var setNavigationTitle = true
1818

19-
open var enableSwipe = true {
19+
public var enableSwipe = true {
2020
didSet {
2121
toggle()
2222
}
2323
}
2424

25-
open var showBottomLine = false {
25+
public var showBottomLine = false {
2626
didSet {
2727
bottomLineView.isHidden = !showBottomLine
2828
}
2929
}
3030

31-
open var showPageControl = true
31+
public var showPageControl = true
32+
private lazy var pages = Array<UIViewController>()
3233

33-
lazy var pages = Array<UIViewController>()
34-
35-
open var pagesCount: Int {
34+
public var pagesCount: Int {
3635
return pages.count
3736
}
3837

39-
open fileprivate(set) var currentIndex = 0
40-
41-
open weak var pagesDelegate: PagesControllerDelegate?
38+
public private(set) var currentIndex = 0
39+
public weak var pagesDelegate: PagesControllerDelegate?
4240

43-
open fileprivate(set) lazy var bottomLineView: UIView = {
41+
public private(set) lazy var bottomLineView: UIView = {
4442
let view = UIView()
4543
view.translatesAutoresizingMaskIntoConstraints = false
4644
view.backgroundColor = UIColor.white
4745
view.alpha = 0.4
4846
view.isHidden = true
4947
return view
50-
}()
48+
}()
5149

52-
open fileprivate(set) var pageControl: UIPageControl?
50+
public private(set) var pageControl: UIPageControl?
5351

5452
public convenience init(_ pages: [UIViewController],
55-
transitionStyle: UIPageViewControllerTransitionStyle = .scroll,
56-
navigationOrientation: UIPageViewControllerNavigationOrientation = .horizontal,
57-
options: [String : AnyObject]? = nil) {
58-
self.init(transitionStyle: transitionStyle,
59-
navigationOrientation: navigationOrientation,
60-
options: options)
53+
transitionStyle: UIPageViewControllerTransitionStyle = .scroll,
54+
navigationOrientation: UIPageViewControllerNavigationOrientation = .horizontal,
55+
options: [String : AnyObject]? = nil) {
56+
self.init(
57+
transitionStyle: transitionStyle,
58+
navigationOrientation: navigationOrientation,
59+
options: options
60+
)
6161

62-
add(pages)
62+
add(pages)
6363
}
6464

6565
open override func viewDidLoad() {
@@ -85,9 +85,9 @@ import UIKit
8585
}
8686
}
8787

88-
// MARK: Public methods
89-
extension PagesController {
88+
// MARK: - Public methods
9089

90+
extension PagesController {
9191
open func goTo(_ index: Int) {
9292
if index >= 0 && index < pages.count {
9393
let direction: UIPageViewControllerNavigationDirection = (index > currentIndex) ? .forward : .reverse
@@ -122,16 +122,17 @@ extension PagesController {
122122
}
123123
}
124124

125-
// MARK: UIPageViewControllerDataSource
125+
// MARK: - UIPageViewControllerDataSource
126126

127127
extension PagesController : UIPageViewControllerDataSource {
128-
129-
open func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
128+
open func pageViewController(_ pageViewController: UIPageViewController,
129+
viewControllerBefore viewController: UIViewController) -> UIViewController? {
130130
let index = prevIndex(viewControllerIndex(viewController))
131131
return pages.at(index)
132132
}
133133

134-
open func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
134+
open func pageViewController(_ pageViewController: UIPageViewController,
135+
viewControllerAfter viewController: UIViewController) -> UIViewController? {
135136
let index: Int? = nextIndex(viewControllerIndex(viewController))
136137
return pages.at(index)
137138
}
@@ -145,40 +146,47 @@ extension PagesController : UIPageViewControllerDataSource {
145146
}
146147
}
147148

148-
// MARK: UIPageViewControllerDelegate
149+
// MARK: - UIPageViewControllerDelegate
149150

150151
extension PagesController : UIPageViewControllerDelegate {
152+
open func pageViewController(_ pageViewController: UIPageViewController,
153+
didFinishAnimating finished: Bool,
154+
previousViewControllers: [UIViewController],
155+
transitionCompleted completed: Bool) {
156+
guard completed else {
157+
return
158+
}
151159

152-
open func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool,
153-
previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
154-
if completed {
155-
if let viewController = pageViewController.viewControllers?.last,
156-
let index = viewControllerIndex(viewController) {
157-
currentIndex = index
160+
guard let viewController = pageViewController.viewControllers?.last else {
161+
return
162+
}
158163

159-
if setNavigationTitle {
160-
title = viewController.title
161-
}
164+
guard let index = viewControllerIndex(viewController) else {
165+
return
166+
}
162167

163-
if let pageControl = pageControl {
164-
pageControl.currentPage = currentIndex
165-
}
168+
currentIndex = index
166169

167-
pagesDelegate?.pageViewController(self, setViewController: pages[currentIndex], atPage: currentIndex)
168-
}
170+
if setNavigationTitle {
171+
title = viewController.title
172+
}
173+
174+
if let pageControl = pageControl {
175+
pageControl.currentPage = currentIndex
169176
}
177+
178+
pagesDelegate?.pageViewController(self, setViewController: pages[currentIndex], atPage: currentIndex)
170179
}
171180
}
172181

173-
// MARK: Private methods
182+
// MARK: - Private methods
174183

175184
extension PagesController {
176-
177185
func viewControllerIndex(_ viewController: UIViewController) -> Int? {
178186
return pages.index(of: viewController)
179187
}
180188

181-
fileprivate func toggle() {
189+
private func toggle() {
182190
for subview in view.subviews {
183191
if let subview = subview as? UIScrollView {
184192
subview.isScrollEnabled = enableSwipe
@@ -187,7 +195,7 @@ extension PagesController {
187195
}
188196
}
189197

190-
fileprivate func addViewController(_ viewController: UIViewController) {
198+
private func addViewController(_ viewController: UIViewController) {
191199
pages.append(viewController)
192200

193201
if pages.count == 1 {
@@ -205,7 +213,7 @@ extension PagesController {
205213
}
206214
}
207215

208-
fileprivate func addConstraints() {
216+
private func addConstraints() {
209217
view.addConstraint(NSLayoutConstraint(item: bottomLineView, attribute: .bottom,
210218
relatedBy: .equal, toItem: view, attribute: .bottom,
211219
multiplier: 1, constant: -Dimensions.bottomLineBottomMargin))
@@ -227,10 +235,8 @@ extension PagesController {
227235
// MARK: Storyboard
228236

229237
extension PagesController {
230-
231-
public convenience init(_ storyboardIds: [String], storyboard: UIStoryboard = UIStoryboard.Main) {
238+
public convenience init(_ storyboardIds: [String], storyboard: UIStoryboard = .Main) {
232239
let pages = storyboardIds.map(storyboard.instantiateViewController(withIdentifier:))
233240
self.init(pages)
234241
}
235242
}
236-

0 commit comments

Comments
 (0)