Skip to content

Commit 1e730f6

Browse files
devxoulisair
authored andcommitted
Let's Swift 3.0 (#18)
* Update project setting to Swift 3.0 * Add underscore to the first parameters * Use `UIScreen.main` instead of `UIScreen.mainScreen()` * Use CGRect methods instead of global functions * Move `inout` keyword into parameter type annotation * Define operator `=~` using precedence group * Add `@discardableResult` to operator functions * Replace `CGRectZero` and `CGSizeZero` with `.zero` * Add `@discardableResult` to `sizeToFit()` * Update .travis.yml
1 parent cea09b3 commit 1e730f6

File tree

11 files changed

+71
-45
lines changed

11 files changed

+71
-45
lines changed

‎.travis.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
language: objective-c
2-
osx_image: xcode7.1
2+
osx_image: xcode8

‎ManualLayout.xcodeproj/project.pbxproj‎

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@
355355
isa = PBXProject;
356356
attributes = {
357357
LastSwiftUpdateCheck = 0700;
358-
LastUpgradeCheck = 0720;
358+
LastUpgradeCheck = 0800;
359359
ORGANIZATIONNAME = "Baris Sencan";
360360
TargetAttributes = {
361361
5F91347C1AC9E1630001DBF8 = {
@@ -367,9 +367,11 @@
367367
};
368368
5FB4CBE81A9BBE7500C2FB4F = {
369369
CreatedOnToolsVersion = 6.1.1;
370+
LastSwiftMigration = 0800;
370371
};
371372
5FB4CBF31A9BBE7500C2FB4F = {
372373
CreatedOnToolsVersion = 6.1.1;
374+
LastSwiftMigration = 0800;
373375
};
374376
};
375377
};
@@ -605,8 +607,10 @@
605607
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
606608
CLANG_WARN_EMPTY_BODY = YES;
607609
CLANG_WARN_ENUM_CONVERSION = YES;
610+
CLANG_WARN_INFINITE_RECURSION = YES;
608611
CLANG_WARN_INT_CONVERSION = YES;
609612
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
613+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
610614
CLANG_WARN_UNREACHABLE_CODE = YES;
611615
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
612616
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -616,6 +620,7 @@
616620
ENABLE_TESTABILITY = YES;
617621
GCC_C_LANGUAGE_STANDARD = gnu99;
618622
GCC_DYNAMIC_NO_PIC = NO;
623+
GCC_NO_COMMON_BLOCKS = YES;
619624
GCC_OPTIMIZATION_LEVEL = 0;
620625
GCC_PREPROCESSOR_DEFINITIONS = (
621626
"DEBUG=1",
@@ -652,8 +657,10 @@
652657
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
653658
CLANG_WARN_EMPTY_BODY = YES;
654659
CLANG_WARN_ENUM_CONVERSION = YES;
660+
CLANG_WARN_INFINITE_RECURSION = YES;
655661
CLANG_WARN_INT_CONVERSION = YES;
656662
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
663+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
657664
CLANG_WARN_UNREACHABLE_CODE = YES;
658665
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
659666
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
@@ -662,6 +669,7 @@
662669
ENABLE_NS_ASSERTIONS = NO;
663670
ENABLE_STRICT_OBJC_MSGSEND = YES;
664671
GCC_C_LANGUAGE_STANDARD = gnu99;
672+
GCC_NO_COMMON_BLOCKS = YES;
665673
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
666674
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
667675
GCC_WARN_UNDECLARED_SELECTOR = YES;
@@ -671,6 +679,7 @@
671679
IPHONEOS_DEPLOYMENT_TARGET = 8.1;
672680
MTL_ENABLE_DEBUG_INFO = NO;
673681
SDKROOT = iphoneos;
682+
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
674683
TARGETED_DEVICE_FAMILY = "1,2";
675684
VALIDATE_PRODUCT = YES;
676685
VERSIONING_SYSTEM = "apple-generic";
@@ -682,6 +691,7 @@
682691
isa = XCBuildConfiguration;
683692
buildSettings = {
684693
CLANG_ENABLE_MODULES = YES;
694+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
685695
DEFINES_MODULE = YES;
686696
DYLIB_COMPATIBILITY_VERSION = 1;
687697
DYLIB_CURRENT_VERSION = 1;
@@ -694,13 +704,15 @@
694704
PRODUCT_NAME = "$(TARGET_NAME)";
695705
SKIP_INSTALL = YES;
696706
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
707+
SWIFT_VERSION = 3.0;
697708
};
698709
name = Debug;
699710
};
700711
5FB4CC011A9BBE7500C2FB4F /* Release */ = {
701712
isa = XCBuildConfiguration;
702713
buildSettings = {
703714
CLANG_ENABLE_MODULES = YES;
715+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
704716
DEFINES_MODULE = YES;
705717
DYLIB_COMPATIBILITY_VERSION = 1;
706718
DYLIB_CURRENT_VERSION = 1;
@@ -712,6 +724,7 @@
712724
PRODUCT_BUNDLE_IDENTIFIER = "com.bsencan.$(PRODUCT_NAME:rfc1034identifier)";
713725
PRODUCT_NAME = "$(TARGET_NAME)";
714726
SKIP_INSTALL = YES;
727+
SWIFT_VERSION = 3.0;
715728
};
716729
name = Release;
717730
};
@@ -730,6 +743,7 @@
730743
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
731744
PRODUCT_BUNDLE_IDENTIFIER = "com.bsencan.$(PRODUCT_NAME:rfc1034identifier)";
732745
PRODUCT_NAME = "$(TARGET_NAME)";
746+
SWIFT_VERSION = 3.0;
733747
};
734748
name = Debug;
735749
};
@@ -744,6 +758,7 @@
744758
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
745759
PRODUCT_BUNDLE_IDENTIFIER = "com.bsencan.$(PRODUCT_NAME:rfc1034identifier)";
746760
PRODUCT_NAME = "$(TARGET_NAME)";
761+
SWIFT_VERSION = 3.0;
747762
};
748763
name = Release;
749764
};
@@ -752,6 +767,7 @@
752767
buildSettings = {
753768
BITCODE_GENERATION_MODE = bitcode;
754769
CLANG_ENABLE_MODULES = YES;
770+
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
755771
DEFINES_MODULE = YES;
756772
DYLIB_COMPATIBILITY_VERSION = 1;
757773
DYLIB_CURRENT_VERSION = 1;
@@ -775,6 +791,7 @@
775791
buildSettings = {
776792
BITCODE_GENERATION_MODE = bitcode;
777793
CLANG_ENABLE_MODULES = YES;
794+
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
778795
DEFINES_MODULE = YES;
779796
DYLIB_COMPATIBILITY_VERSION = 1;
780797
DYLIB_CURRENT_VERSION = 1;

‎ManualLayout.xcodeproj/xcshareddata/xcschemes/ManualLayout-tvOS.xcscheme‎

Lines changed: 1 addition & 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 = "0720"
3+
LastUpgradeVersion = "0800"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

‎ManualLayout.xcodeproj/xcshareddata/xcschemes/ManualLayout.xcscheme‎

Lines changed: 1 addition & 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 = "0720"
3+
LastUpgradeVersion = "0800"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

‎ManualLayout/HelperFunctions.swift‎

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,94 +9,94 @@
99
import UIKit
1010

1111
internal func snapToPixel(pointCoordinate coordinate: CGFloat) -> CGFloat {
12-
let screenScale = UIScreen.mainScreen().scale
12+
let screenScale = UIScreen.main.scale
1313
return round(coordinate * screenScale) / screenScale
1414
}
1515

1616
//MARK: - Insetting
1717

18-
public func inset(view: UIView, amount: CGFloat) -> CGRect {
18+
public func inset(_ view: UIView, amount: CGFloat) -> CGRect {
1919
return inset(view.frame, amount: amount)
2020
}
2121

22-
public func inset(layer: CALayer, amount: CGFloat) -> CGRect {
22+
public func inset(_ layer: CALayer, amount: CGFloat) -> CGRect {
2323
return inset(layer.frame, amount: amount)
2424
}
2525

26-
public func inset(rect: CGRect, amount: CGFloat) -> CGRect {
27-
return CGRectInset(rect, amount, amount)
26+
public func inset(_ rect: CGRect, amount: CGFloat) -> CGRect {
27+
return rect.insetBy(dx: amount, dy: amount)
2828
}
2929

30-
public func inset(view: UIView, dx: CGFloat, dy: CGFloat) -> CGRect {
30+
public func inset(_ view: UIView, dx: CGFloat, dy: CGFloat) -> CGRect {
3131
return inset(view.frame, dx: dx, dy: dy)
3232
}
3333

34-
public func inset(layer: CALayer, dx: CGFloat, dy: CGFloat) -> CGRect {
34+
public func inset(_ layer: CALayer, dx: CGFloat, dy: CGFloat) -> CGRect {
3535
return inset(layer.frame, dx: dx, dy: dy)
3636
}
3737

38-
public func inset(rect: CGRect, dx: CGFloat, dy: CGFloat) -> CGRect {
39-
return CGRectInset(rect, dx, dy)
38+
public func inset(_ rect: CGRect, dx: CGFloat, dy: CGFloat) -> CGRect {
39+
return rect.insetBy(dx: dx, dy: dy)
4040
}
4141

42-
public func inset(view: UIView, top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> CGRect {
42+
public func inset(_ view: UIView, top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> CGRect {
4343
return inset(view.frame, top: top, left: left, bottom: bottom, right: right)
4444
}
4545

46-
public func inset(layer: CALayer, top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> CGRect {
46+
public func inset(_ layer: CALayer, top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> CGRect {
4747
return inset(layer.frame, top: top, left: left, bottom: bottom, right: right)
4848
}
4949

50-
public func inset(rect: CGRect, top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> CGRect {
50+
public func inset(_ rect: CGRect, top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> CGRect {
5151
return CGRect(
5252
origin: offset(rect.origin, dx: left, dy: top),
5353
size: inset(rect.size, top: top, left: left, bottom: bottom, right: right))
5454
}
5555

56-
public func inset(size: CGSize, amount: CGFloat) -> CGSize {
56+
public func inset(_ size: CGSize, amount: CGFloat) -> CGSize {
5757
return inset(size, dx: amount, dy: amount)
5858
}
5959

60-
public func inset(size: CGSize, dx: CGFloat, dy: CGFloat) -> CGSize {
60+
public func inset(_ size: CGSize, dx: CGFloat, dy: CGFloat) -> CGSize {
6161
return inset(size, top: dy, left: dx, bottom: dy, right: dx)
6262
}
6363

64-
public func inset(size: CGSize, top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> CGSize {
64+
public func inset(_ size: CGSize, top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> CGSize {
6565
return CGSize(
6666
width: size.width - left - right,
6767
height: size.height - top - bottom)
6868
}
6969

7070
// MARK: - Offsetting
7171

72-
public func offset(view: UIView, amount: CGFloat) -> CGRect {
72+
public func offset(_ view: UIView, amount: CGFloat) -> CGRect {
7373
return offset(view.frame, amount: amount)
7474
}
7575

76-
public func offset(layer: CALayer, amount: CGFloat) -> CGRect {
76+
public func offset(_ layer: CALayer, amount: CGFloat) -> CGRect {
7777
return offset(layer.frame, amount: amount)
7878
}
7979

80-
public func offset(rect: CGRect, amount: CGFloat) -> CGRect {
81-
return CGRectOffset(rect, amount, amount)
80+
public func offset(_ rect: CGRect, amount: CGFloat) -> CGRect {
81+
return rect.offsetBy(dx: amount, dy: amount)
8282
}
8383

84-
public func offset(view: UIView, dx: CGFloat, dy: CGFloat) -> CGRect {
84+
public func offset(_ view: UIView, dx: CGFloat, dy: CGFloat) -> CGRect {
8585
return offset(view.frame, dx: dx, dy: dy)
8686
}
8787

88-
public func offset(layer: CALayer, dx: CGFloat, dy: CGFloat) -> CGRect {
88+
public func offset(_ layer: CALayer, dx: CGFloat, dy: CGFloat) -> CGRect {
8989
return offset(layer.frame, dx: dx, dy: dy)
9090
}
9191

92-
public func offset(rect: CGRect, dx: CGFloat, dy: CGFloat) -> CGRect {
93-
return CGRectOffset(rect, dx, dy)
92+
public func offset(_ rect: CGRect, dx: CGFloat, dy: CGFloat) -> CGRect {
93+
return rect.offsetBy(dx: dx, dy: dy)
9494
}
9595

96-
public func offset(point: CGPoint, amount: CGFloat) -> CGPoint {
96+
public func offset(_ point: CGPoint, amount: CGFloat) -> CGPoint {
9797
return offset(point, dx: amount, dy: amount)
9898
}
9999

100-
public func offset(point: CGPoint, dx: CGFloat, dy: CGFloat) -> CGPoint {
100+
public func offset(_ point: CGPoint, dx: CGFloat, dy: CGFloat) -> CGPoint {
101101
return CGPoint(x: point.x + dx, y: point.y + dy)
102102
}

‎ManualLayout/SmartAssign.swift‎

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,26 @@
88

99
import UIKit
1010

11-
infix operator =~ { associativity right precedence 150 }
11+
precedencegroup SmartAssignment {
12+
assignment: true
13+
}
14+
15+
infix operator =~ : SmartAssignment
1216

13-
public func =~ (inout point: CGPoint, pointTuple: (CGFloat, CGFloat)) -> CGPoint {
17+
@discardableResult
18+
public func =~ (point: inout CGPoint, pointTuple: (CGFloat, CGFloat)) -> CGPoint {
1419
point = CGPoint(x: pointTuple.0, y: pointTuple.1)
1520
return point
1621
}
1722

18-
public func =~ (inout size: CGSize, sizeTuple: (CGFloat, CGFloat)) -> CGSize {
23+
@discardableResult
24+
public func =~ (size: inout CGSize, sizeTuple: (CGFloat, CGFloat)) -> CGSize {
1925
size = CGSize(width: sizeTuple.0, height: sizeTuple.1)
2026
return size
2127
}
2228

23-
public func =~ (inout rect: CGRect, rectTuple: (CGFloat, CGFloat, CGFloat, CGFloat)) -> CGRect {
29+
@discardableResult
30+
public func =~ (rect: inout CGRect, rectTuple: (CGFloat, CGFloat, CGFloat, CGFloat)) -> CGRect {
2431
rect = CGRect(x: rectTuple.0, y: rectTuple.1, width: rectTuple.2, height: rectTuple.3)
2532
return rect
2633
}

‎ManualLayout/UIView+ManualLayout.swift‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,13 @@ public extension UIView {
101101

102102
// MARK: - Automatic Sizing
103103

104-
public func sizeToFit(width: CGFloat, _ height: CGFloat) -> CGSize {
104+
@discardableResult
105+
public func sizeToFit(_ width: CGFloat, _ height: CGFloat) -> CGSize {
105106
return sizeToFit(CGSize(width: width, height: height))
106107
}
107108

108-
public func sizeToFit(constrainedSize: CGSize) -> CGSize {
109+
@discardableResult
110+
public func sizeToFit(_ constrainedSize: CGSize) -> CGSize {
109111
var newSize = sizeThatFits(constrainedSize)
110112
newSize.width = min(newSize.width, constrainedSize.width)
111113
newSize.height = min(newSize.height, constrainedSize.height)

‎ManualLayoutTests/HelperFunctionTests.swift‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import XCTest
1111
import ManualLayout
1212

1313
class HelperFunctionTests: XCTestCase {
14-
var view = UIView(frame: CGRectZero)
14+
var view = UIView(frame: .zero)
1515
let defaultFrame = CGRect(x: 1, y: 3, width: 6, height: 8)
1616

1717
override func setUp() {

‎ManualLayoutTests/SmartAssignTests.swift‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ import XCTest
1111
import ManualLayout
1212

1313
class SmartAssignTests: XCTestCase {
14-
var view = UIView(frame: CGRectZero)
14+
var view = UIView(frame: .zero)
1515

1616
override func setUp() {
17-
view.frame = CGRectZero
17+
view.frame = .zero
1818
}
1919

2020
func testPointAssignment() {

‎ManualLayoutTests/UIViewManualLayoutTests.swift‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import XCTest
1111
import ManualLayout
1212

1313
class UIViewManualLayoutTests: XCTestCase {
14-
let view = UIView(frame: CGRectZero)
14+
let view = UIView(frame: .zero)
1515
let defaultFrame = CGRect(x: 1, y: 3, width: 6, height: 8)
1616

1717
override func setUp() {
@@ -92,14 +92,14 @@ class UIViewManualLayoutTests: XCTestCase {
9292
}
9393

9494
func testSize() {
95-
view.size = CGSizeZero
95+
view.size = .zero
9696
XCTAssertEqual(
9797
view.frame.origin,
9898
defaultFrame.origin,
9999
"size changes should not modify frame origin")
100100
XCTAssertEqual(
101101
view.frame.size,
102-
CGSizeZero,
102+
.zero,
103103
"size changes should modify frame size")
104104
}
105105

@@ -229,7 +229,7 @@ class UIViewManualLayoutTests: XCTestCase {
229229

230230
func testSizeToFit() {
231231
let containerView = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: 200))
232-
let label = UILabel(frame: CGRectZero)
232+
let label = UILabel(frame: .zero)
233233
label.text = "lorem ipsum dolor sit amet"
234234
label.numberOfLines = 5
235235
containerView.addSubview(label)

0 commit comments

Comments
 (0)