diff --git a/Alerts&Pickers.xcodeproj/project.pbxproj b/Alerts&Pickers.xcodeproj/project.pbxproj
index 770321c2..8f9c109c 100644
--- a/Alerts&Pickers.xcodeproj/project.pbxproj
+++ b/Alerts&Pickers.xcodeproj/project.pbxproj
@@ -513,11 +513,12 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0920;
- LastUpgradeCheck = 0920;
+ LastUpgradeCheck = 1020;
ORGANIZATIONNAME = "Supreme Apps";
TargetAttributes = {
FA3BB2722008B41B00E06F8F = {
CreatedOnToolsVersion = 9.2;
+ LastSwiftMigration = 1020;
ProvisioningStyle = Automatic;
};
};
@@ -649,6 +650,7 @@
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
@@ -656,6 +658,7 @@
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
@@ -685,7 +688,7 @@
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.2;
MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = NO;
+ ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -707,6 +710,7 @@
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
@@ -714,6 +718,7 @@
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
@@ -754,7 +759,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "AA.Alerts-Pickers";
PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_VERSION = 4.0;
+ SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
@@ -769,7 +774,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "AA.Alerts-Pickers";
PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_VERSION = 4.0;
+ SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
diff --git a/Alerts&Pickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Alerts&Pickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/Alerts&Pickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/Alerts&Pickers.xcodeproj/xcshareddata/xcschemes/iPhone X.xcscheme b/Alerts&Pickers.xcodeproj/xcshareddata/xcschemes/iPhone X.xcscheme
index 477a9fce..530419db 100644
--- a/Alerts&Pickers.xcodeproj/xcshareddata/xcschemes/iPhone X.xcscheme
+++ b/Alerts&Pickers.xcodeproj/xcshareddata/xcschemes/iPhone X.xcscheme
@@ -1,6 +1,6 @@
@@ -46,7 +45,6 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
diff --git a/Example/AppDelegate.swift b/Example/AppDelegate.swift
index e1a46626..4c5c9e78 100644
--- a/Example/AppDelegate.swift
+++ b/Example/AppDelegate.swift
@@ -5,7 +5,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
- func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
+ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = UINavigationController(rootViewController: ViewController())
window?.makeKeyAndVisible()
diff --git a/Example/FlowLayouts/VegaScrollFlowLayout.swift b/Example/FlowLayouts/VegaScrollFlowLayout.swift
index 1008a30f..98fe95f0 100755
--- a/Example/FlowLayouts/VegaScrollFlowLayout.swift
+++ b/Example/FlowLayouts/VegaScrollFlowLayout.swift
@@ -120,7 +120,7 @@ open class VerticalScrollFlowLayout: UICollectionViewFlowLayout {
let touchLocation = collectionView!.panGestureRecognizer.location(in: collectionView)
- dynamicAnimator.behaviors.flatMap { $0 as? UIAttachmentBehavior }.forEach { behavior in
+ dynamicAnimator.behaviors.compactMap { $0 as? UIAttachmentBehavior }.forEach { behavior in
let attrs = behavior.items.first as! UICollectionViewLayoutAttributes
attrs.center = getUpdatedBehaviorItemCenter(behavior: behavior, touchLocation: touchLocation)
self.dynamicAnimator.updateItem(usingCurrentState: attrs)
@@ -168,8 +168,8 @@ open class VerticalScrollFlowLayout: UICollectionViewFlowLayout {
}
private func getUpdatedBehaviorItemCenter(behavior: UIAttachmentBehavior,touchLocation: CGPoint) -> CGPoint {
- let yDistanceFromTouch = fabs(touchLocation.y - behavior.anchorPoint.y)
- let xDistanceFromTouch = fabs(touchLocation.x - behavior.anchorPoint.x)
+ let yDistanceFromTouch = abs(touchLocation.y - behavior.anchorPoint.y)
+ let xDistanceFromTouch = abs(touchLocation.x - behavior.anchorPoint.x)
let scrollResistance = (yDistanceFromTouch + xDistanceFromTouch) / (springHardness * 100)
let attrs = behavior.items.first as! UICollectionViewLayoutAttributes
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
index 31a3aea8..7130009d 100644
--- a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -1,104 +1,153 @@
{
"images" : [
{
- "idiom" : "iphone",
"size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "NotificationIcon@2x.png",
"scale" : "2x"
},
{
- "idiom" : "iphone",
"size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "NotificationIcon@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
- "filename" : "app-icon-setting@2x-1.png",
+ "filename" : "Icon-Small.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-Small@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
- "filename" : "app-icon-setting@3x.png",
+ "filename" : "Icon-Small@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
- "filename" : "app-icon-spotlight@2x-1.png",
+ "filename" : "Icon-40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
- "filename" : "app-icon-spotlight@3x.png",
+ "filename" : "Icon-40@3x.png",
"scale" : "3x"
},
+ {
+ "size" : "57x57",
+ "idiom" : "iphone",
+ "filename" : "Icon.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "57x57",
+ "idiom" : "iphone",
+ "filename" : "Icon@2x.png",
+ "scale" : "2x"
+ },
{
"size" : "60x60",
"idiom" : "iphone",
- "filename" : "app-icon-iphone@2x.png",
+ "filename" : "Icon-60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
- "filename" : "app-icon-iphone@3x.png",
+ "filename" : "Icon-60@3x.png",
"scale" : "3x"
},
{
- "idiom" : "ipad",
"size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "NotificationIcon~ipad.png",
"scale" : "1x"
},
{
- "idiom" : "ipad",
"size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "NotificationIcon~ipad@2x.png",
"scale" : "2x"
},
{
- "idiom" : "ipad",
"size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-Small.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
- "filename" : "app-icon-setting@2x.png",
+ "filename" : "Icon-Small@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
- "filename" : "app-icon-spotlight.png",
+ "filename" : "Icon-40.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
- "filename" : "app-icon-spotlight@2x.png",
+ "filename" : "Icon-40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "50x50",
+ "idiom" : "ipad",
+ "filename" : "Icon-Small-50.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "50x50",
+ "idiom" : "ipad",
+ "filename" : "Icon-Small-50@2x.png",
"scale" : "2x"
},
{
+ "size" : "72x72",
"idiom" : "ipad",
+ "filename" : "Icon-72.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "72x72",
+ "idiom" : "ipad",
+ "filename" : "Icon-72@2x.png",
+ "scale" : "2x"
+ },
+ {
"size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-76.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
- "filename" : "app-icon-ipad@2x-1.png",
+ "filename" : "Icon-76@2x.png",
"scale" : "2x"
},
{
- "idiom" : "ipad",
"size" : "83.5x83.5",
+ "idiom" : "ipad",
+ "filename" : "Icon-83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
- "filename" : "app-icon-app-store.png",
+ "filename" : "ios-marketing.png",
"scale" : "1x"
}
],
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-40.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-40.png
new file mode 100644
index 00000000..7feb6214
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-40.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png
new file mode 100644
index 00000000..396146eb
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png
new file mode 100644
index 00000000..3c692d5e
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png
new file mode 100644
index 00000000..3c692d5e
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png
new file mode 100644
index 00000000..ea3652b2
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-72.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-72.png
new file mode 100644
index 00000000..1d52b3b4
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-72.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png
new file mode 100644
index 00000000..5203103a
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-76.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-76.png
new file mode 100644
index 00000000..455e93ac
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-76.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png
new file mode 100644
index 00000000..639db0d0
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png
new file mode 100644
index 00000000..0ab0aa07
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png
new file mode 100644
index 00000000..1f63c6e1
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png
new file mode 100644
index 00000000..4e5970c6
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small.png
new file mode 100644
index 00000000..4feda156
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png
new file mode 100644
index 00000000..edc00b4a
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png
new file mode 100644
index 00000000..4328f7cb
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon.png
new file mode 100644
index 00000000..a917130d
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon@2x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon@2x.png
new file mode 100644
index 00000000..e0123ed1
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/Icon@2x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/NotificationIcon@2x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/NotificationIcon@2x.png
new file mode 100644
index 00000000..7feb6214
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/NotificationIcon@2x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/NotificationIcon@3x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/NotificationIcon@3x.png
new file mode 100644
index 00000000..24a778ad
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/NotificationIcon@3x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/NotificationIcon~ipad.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/NotificationIcon~ipad.png
new file mode 100644
index 00000000..0c22dc19
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/NotificationIcon~ipad.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/NotificationIcon~ipad@2x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/NotificationIcon~ipad@2x.png
new file mode 100644
index 00000000..7feb6214
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/NotificationIcon~ipad@2x.png differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-app-store.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-app-store.png
deleted file mode 100644
index 74452b23..00000000
Binary files a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-app-store.png and /dev/null differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-ipad@2x-1.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-ipad@2x-1.png
deleted file mode 100644
index ee9907eb..00000000
Binary files a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-ipad@2x-1.png and /dev/null differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-iphone@2x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-iphone@2x.png
deleted file mode 100644
index a97b42b7..00000000
Binary files a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-iphone@2x.png and /dev/null differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-iphone@3x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-iphone@3x.png
deleted file mode 100644
index 8c0ea5fe..00000000
Binary files a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-iphone@3x.png and /dev/null differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-setting@2x-1.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-setting@2x-1.png
deleted file mode 100644
index e7fc0e44..00000000
Binary files a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-setting@2x-1.png and /dev/null differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-setting@2x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-setting@2x.png
deleted file mode 100644
index e7fc0e44..00000000
Binary files a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-setting@2x.png and /dev/null differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-setting@3x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-setting@3x.png
deleted file mode 100644
index b3eb532e..00000000
Binary files a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-setting@3x.png and /dev/null differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-spotlight.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-spotlight.png
deleted file mode 100644
index eb16b3da..00000000
Binary files a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-spotlight.png and /dev/null differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-spotlight@2x-1.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-spotlight@2x-1.png
deleted file mode 100644
index aafa1934..00000000
Binary files a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-spotlight@2x-1.png and /dev/null differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-spotlight@2x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-spotlight@2x.png
deleted file mode 100644
index aafa1934..00000000
Binary files a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-spotlight@2x.png and /dev/null differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-spotlight@3x.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-spotlight@3x.png
deleted file mode 100644
index 248f9e92..00000000
Binary files a/Example/Resources/Assets.xcassets/AppIcon.appiconset/app-icon-spotlight@3x.png and /dev/null differ
diff --git a/Example/Resources/Assets.xcassets/AppIcon.appiconset/ios-marketing.png b/Example/Resources/Assets.xcassets/AppIcon.appiconset/ios-marketing.png
new file mode 100644
index 00000000..01f5aceb
Binary files /dev/null and b/Example/Resources/Assets.xcassets/AppIcon.appiconset/ios-marketing.png differ
diff --git a/Example/ViewController.swift b/Example/ViewController.swift
index 09376c63..1e87b27c 100644
--- a/Example/ViewController.swift
+++ b/Example/ViewController.swift
@@ -99,7 +99,7 @@ class ViewController: UIViewController {
// MARK: Properties
- fileprivate var alertStyle: UIAlertControllerStyle = .actionSheet
+ fileprivate var alertStyle: UIAlertController.Style = .actionSheet
fileprivate lazy var segments: SegmentedControl = {
let styles: [String] = ["Alert", "ActionSheet"]
@@ -120,7 +120,7 @@ class ViewController: UIViewController {
$0.register(TypeOneCell.self, forCellWithReuseIdentifier: TypeOneCell.identifier)
$0.showsVerticalScrollIndicator = false
$0.showsHorizontalScrollIndicator = false
- $0.decelerationRate = UIScrollViewDecelerationRateFast
+ $0.decelerationRate = UIScrollView.DecelerationRate.fast
//$0.contentInsetAdjustmentBehavior = .never
$0.bounces = true
$0.backgroundColor = .white
@@ -293,7 +293,7 @@ class ViewController: UIViewController {
let frameSizes: [CGFloat] = (150...300).map { CGFloat($0) }
let pickerViewValues: [[String]] = [frameSizes.map { Int($0).description }]
- let pickerViewSelectedValue: PickerViewViewController.Index = (column: 0, row: frameSizes.index(of: 216) ?? 0)
+ let pickerViewSelectedValue: PickerViewViewController.Index = (column: 0, row: frameSizes.firstIndex(of: 216) ?? 0)
alert.addPickerView(values: pickerViewValues, initialSelection: pickerViewSelectedValue) { vc, picker, index, values in
diff --git a/Source/Extensions/Array+Extensions.swift b/Source/Extensions/Array+Extensions.swift
index 97fdf5de..f47621e9 100644
--- a/Source/Extensions/Array+Extensions.swift
+++ b/Source/Extensions/Array+Extensions.swift
@@ -109,14 +109,14 @@ extension Array where Element: Equatable {
public extension Array {
/// Random item from array.
- public var randomItem: Element? {
+ var randomItem: Element? {
if self.isEmpty { return nil }
let index = Int(arc4random_uniform(UInt32(count)))
return self[index]
}
/// Shuffled version of array.
- public var shuffled: [Element] {
+ var shuffled: [Element] {
var arr = self
for _ in 0..<10 {
arr.sort { (_,_) in arc4random() < arc4random() }
@@ -125,7 +125,7 @@ public extension Array {
}
/// Shuffle array.
- public mutating func shuffle() {
+ mutating func shuffle() {
// https://gist.github.com/ijoshsmith/5e3c7d8c2099a3fe8dc3
for _ in 0..<10 {
sort { (_,_) in arc4random() < arc4random() }
@@ -136,7 +136,7 @@ public extension Array {
///
/// - Parameter index: index of element.
/// - Returns: optional element (if exists).
- public func item(at index: Int) -> Element? {
+ func item(at index: Int) -> Element? {
guard index >= 0 && index < count else { return nil }
return self[index]
}
diff --git a/Source/Extensions/Date+Extension.swift b/Source/Extensions/Date+Extension.swift
index 279b7ca2..04c5dc98 100644
--- a/Source/Extensions/Date+Extension.swift
+++ b/Source/Extensions/Date+Extension.swift
@@ -3,17 +3,17 @@ import Foundation
public extension Date {
/// User’s current calendar.
- public var calendar: Calendar {
+ var calendar: Calendar {
return Calendar.current
}
/// Era.
- public var era: Int {
+ var era: Int {
return calendar.component(.era, from: self)
}
/// Year.
- public var year: Int {
+ var year: Int {
get {
return calendar.component(.year, from: self)
}
@@ -23,12 +23,12 @@ public extension Date {
}
/// Quarter.
- public var quarter: Int {
+ var quarter: Int {
return calendar.component(.quarter, from: self)
}
/// Month.
- public var month: Int {
+ var month: Int {
get {
return calendar.component(.month, from: self)
}
@@ -38,22 +38,22 @@ public extension Date {
}
/// Week of year.
- public var weekOfYear: Int {
+ var weekOfYear: Int {
return calendar.component(.weekOfYear, from: self)
}
/// Week of month.
- public var weekOfMonth: Int {
+ var weekOfMonth: Int {
return calendar.component(.weekOfMonth, from: self)
}
/// Weekday.
- public var weekday: Int {
+ var weekday: Int {
return calendar.component(.weekday, from: self)
}
/// Day.
- public var day: Int {
+ var day: Int {
get {
return calendar.component(.day, from: self)
}
@@ -63,7 +63,7 @@ public extension Date {
}
/// Hour.
- public var hour: Int {
+ var hour: Int {
get {
return calendar.component(.hour, from: self)
}
@@ -73,7 +73,7 @@ public extension Date {
}
/// Minutes.
- public var minute: Int {
+ var minute: Int {
get {
return calendar.component(.minute, from: self)
}
@@ -83,7 +83,7 @@ public extension Date {
}
/// Seconds.
- public var second: Int {
+ var second: Int {
get {
return calendar.component(.second, from: self)
}
@@ -93,27 +93,27 @@ public extension Date {
}
/// Nanoseconds.
- public var nanosecond: Int {
+ var nanosecond: Int {
return calendar.component(.nanosecond, from: self)
}
/// Check if date is in future.
- public var isInFuture: Bool {
+ var isInFuture: Bool {
return self > Date()
}
/// Check if date is in past.
- public var isInPast: Bool {
+ var isInPast: Bool {
return self < Date()
}
/// Check if date is in today.
- public var isInToday: Bool {
+ var isInToday: Bool {
return self.day == Date().day && self.month == Date().month && self.year == Date().year
}
/// ISO8601 string of format (yyyy-MM-dd'T'HH:mm:ss.SSS) from date.
- public var iso8601String: String {
+ var iso8601String: String {
// https://github.com/justinmakaila/NSDate-ISO-8601/blob/master/NSDateISO8601.swift
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
@@ -124,7 +124,7 @@ public extension Date {
}
/// Nearest five minutes to date.
- public var nearestFiveMinutes: Date {
+ var nearestFiveMinutes: Date {
var components = Calendar.current.dateComponents([.year, .month , .day , .hour , .minute], from: self)
guard let min = components.minute else {
return self
@@ -138,7 +138,7 @@ public extension Date {
}
/// Nearest ten minutes to date.
- public var nearestTenMinutes: Date {
+ var nearestTenMinutes: Date {
var components = Calendar.current.dateComponents([.year, .month , .day , .hour , .minute], from: self)
guard let min = components.minute else {
return self
@@ -152,7 +152,7 @@ public extension Date {
}
/// Nearest quarter to date.
- public var nearestHourQuarter: Date {
+ var nearestHourQuarter: Date {
var components = Calendar.current.dateComponents([.year, .month , .day , .hour , .minute], from: self)
guard let min = components.minute else {
return self
@@ -166,7 +166,7 @@ public extension Date {
}
/// Nearest half hour to date.
- public var nearestHalfHour: Date {
+ var nearestHalfHour: Date {
var components = Calendar.current.dateComponents([.year, .month , .day , .hour , .minute], from: self)
guard let min = components.minute else {
return self
@@ -180,12 +180,12 @@ public extension Date {
}
/// Time zone used by system.
- public var timeZone: TimeZone {
+ var timeZone: TimeZone {
return self.calendar.timeZone
}
/// UNIX timestamp from date.
- public var unixTimestamp: Double {
+ var unixTimestamp: Double {
return timeIntervalSince1970
}
@@ -200,7 +200,7 @@ public extension Date {
/// - Parameters:
/// - component: component type.
/// - value: multiples of compnenet to add.
- public mutating func add(_ component: Calendar.Component, value: Int) {
+ mutating func add(_ component: Calendar.Component, value: Int) {
switch component {
case .second:
self = calendar.date(byAdding: .second, value: value, to: self) ?? self
@@ -241,7 +241,7 @@ public extension Date {
/// - component: component type.
/// - value: multiples of compnenets to add.
/// - Returns: original date + multiples of compnenet added.
- public func adding(_ component: Calendar.Component, value: Int) -> Date {
+ func adding(_ component: Calendar.Component, value: Int) -> Date {
switch component {
case .second:
return calendar.date(byAdding: .second, value: value, to: self) ?? self
@@ -275,7 +275,7 @@ public extension Date {
/// - component: component type.
/// - value: new value of compnenet to change.
/// - Returns: original date + multiples of compnenets added.
- public func changing(_ component: Calendar.Component, value: Int) -> Date {
+ func changing(_ component: Calendar.Component, value: Int) -> Date {
switch component {
case .second:
var date = self
@@ -316,7 +316,7 @@ public extension Date {
///
/// - Parameter component: calendar component to get date at the beginning of.
/// - Returns: date at the beginning of calendar component (if applicable).
- public func beginning(of component: Calendar.Component) -> Date? {
+ func beginning(of component: Calendar.Component) -> Date? {
switch component {
case .second:
return calendar.date(from: calendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: self))
@@ -348,7 +348,7 @@ public extension Date {
///
/// - Parameter component: calendar component to get date at the end of.
/// - Returns: date at the end of calendar component (if applicable).
- public func end(of component: Calendar.Component) -> Date? {
+ func end(of component: Calendar.Component) -> Date? {
switch component {
case .second:
var date = self.adding(.second, value: 1)
@@ -425,7 +425,7 @@ public extension Date {
///
/// - Parameter style: DateFormatter style (default is .medium)
/// - Returns: date and time string
- public func dateTimeString(ofStyle style: DateFormatter.Style = .medium) -> String {
+ func dateTimeString(ofStyle style: DateFormatter.Style = .medium) -> String {
let dateFormatter = DateFormatter()
dateFormatter.timeStyle = style
dateFormatter.dateStyle = style
@@ -436,7 +436,7 @@ public extension Date {
///
/// - Parameter component: calendar componenet to check.
/// - Returns: true if date is in current given calendar component.
- public func isInCurrent(_ component: Calendar.Component) -> Bool {
+ func isInCurrent(_ component: Calendar.Component) -> Bool {
switch component {
case .second:
return second == Date().second && minute == Date().minute && hour == Date().hour && day == Date().day
@@ -473,7 +473,7 @@ public extension Date {
}
/// Time string from date
- public func timeString(ofStyle style: DateFormatter.Style = .medium) -> String {
+ func timeString(ofStyle style: DateFormatter.Style = .medium) -> String {
let dateFormatter = DateFormatter()
dateFormatter.timeStyle = style
dateFormatter.dateStyle = .none
@@ -499,7 +499,7 @@ public extension Date {
/// - minute: Minute (default is current minute).
/// - second: Second (default is current second).
/// - nanosecond: Nanosecond (default is current nanosecond).
- public init(
+ init(
calendar: Calendar? = Calendar.current,
timeZone: TimeZone? = TimeZone.current,
era: Int? = Date().era,
@@ -529,7 +529,7 @@ public extension Date {
/// Create date object from ISO8601 string.
///
/// - Parameter iso8601String: ISO8601 string of format (yyyy-MM-dd'T'HH:mm:ss.SSSZ).
- public init(iso8601String: String) {
+ init(iso8601String: String) {
// https://github.com/justinmakaila/NSDate-ISO-8601/blob/master/NSDateISO8601.swift
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
@@ -541,7 +541,7 @@ public extension Date {
/// Create new date object from UNIX timestamp.
///
/// - Parameter unixTimestamp: UNIX timestamp.
- public init(unixTimestamp: Double) {
+ init(unixTimestamp: Double) {
self.init(timeIntervalSince1970: unixTimestamp)
}
@@ -549,7 +549,7 @@ public extension Date {
public extension Date {
/// SwiftRandom extension
- public static func randomWithinDaysBeforeToday(_ days: Int) -> Date {
+ static func randomWithinDaysBeforeToday(_ days: Int) -> Date {
let today = Date()
let gregorian = Calendar(identifier: Calendar.Identifier.gregorian)
@@ -572,7 +572,7 @@ public extension Date {
}
/// SwiftRandom extension
- public static func random() -> Date {
+ static func random() -> Date {
let randomTime = TimeInterval(arc4random_uniform(UInt32.max))
return Date(timeIntervalSince1970: randomTime)
}
diff --git a/Source/Extensions/String+Extensions.swift b/Source/Extensions/String+Extensions.swift
index e982124d..1a0831de 100644
--- a/Source/Extensions/String+Extensions.swift
+++ b/Source/Extensions/String+Extensions.swift
@@ -13,7 +13,7 @@ extension String {
subscript (r: Range) -> String {
let start = index(startIndex, offsetBy: r.lowerBound)
let end = index(startIndex, offsetBy: r.upperBound)
- return String(self[Range(start ..< end)])
+ return String(self[start ..< end])
}
var containsAlphabets: Bool {
@@ -30,27 +30,27 @@ extension String {
public extension String {
/// Regular string.
- public var regular: NSAttributedString {
+ var regular: NSAttributedString {
return NSMutableAttributedString(string: self, attributes: [.font: UIFont.systemFont(ofSize: UIFont.systemFontSize)])
}
/// Bold string.
- public var bold: NSAttributedString {
+ var bold: NSAttributedString {
return NSMutableAttributedString(string: self, attributes: [.font: UIFont.boldSystemFont(ofSize: UIFont.systemFontSize)])
}
/// Underlined string
- public var underline: NSAttributedString {
- return NSAttributedString(string: self, attributes: [.underlineStyle: NSUnderlineStyle.styleSingle.rawValue])
+ var underline: NSAttributedString {
+ return NSAttributedString(string: self, attributes: [.underlineStyle: NSUnderlineStyle.single.rawValue])
}
/// Strikethrough string.
- public var strikethrough: NSAttributedString {
- return NSAttributedString(string: self, attributes: [.strikethroughStyle: NSNumber(value: NSUnderlineStyle.styleSingle.rawValue as Int)])
+ var strikethrough: NSAttributedString {
+ return NSAttributedString(string: self, attributes: [.strikethroughStyle: NSNumber(value: NSUnderlineStyle.single.rawValue as Int)])
}
/// Italic string.
- public var italic: NSAttributedString {
+ var italic: NSAttributedString {
return NSMutableAttributedString(string: self, attributes: [.font: UIFont.italicSystemFont(ofSize: UIFont.systemFontSize)])
}
@@ -58,7 +58,7 @@ public extension String {
///
/// - Parameter color: text color.
/// - Returns: a NSAttributedString versions of string colored with given color.
- public func colored(with color: UIColor) -> NSAttributedString {
+ func colored(with color: UIColor) -> NSAttributedString {
return NSMutableAttributedString(string: self, attributes: [.foregroundColor: color])
}
}
diff --git a/Source/Extensions/UIAlertController+Extensions.swift b/Source/Extensions/UIAlertController+Extensions.swift
index 8ca0f37c..ad599943 100644
--- a/Source/Extensions/UIAlertController+Extensions.swift
+++ b/Source/Extensions/UIAlertController+Extensions.swift
@@ -12,7 +12,7 @@ extension UIAlertController {
/// - message: alert controller's message (default is nil).
/// - defaultActionButtonTitle: default action button title (default is "OK")
/// - tintColor: alert controller's tint color (default is nil)
- convenience init(style: UIAlertControllerStyle, source: UIView? = nil, title: String? = nil, message: String? = nil, tintColor: UIColor? = nil) {
+ convenience init(style: UIAlertController.Style, source: UIView? = nil, title: String? = nil, message: String? = nil, tintColor: UIColor? = nil) {
self.init(title: title, message: message, preferredStyle: style)
// TODO: for iPad or other views
@@ -48,7 +48,7 @@ extension UIAlertController {
/// - animated: set true to animate presentation of alert controller (default is true).
/// - vibrate: set true to vibrate the device while presenting the alert (default is false).
/// - completion: an optional completion handler to be called after presenting alert controller (default is nil).
- public func show(animated: Bool = true, vibrate: Bool = false, style: UIBlurEffectStyle? = nil, completion: (() -> Void)? = nil) {
+ public func show(animated: Bool = true, vibrate: Bool = false, style: UIBlurEffect.Style? = nil, completion: (() -> Void)? = nil) {
/// TODO: change UIBlurEffectStyle
if let style = style {
@@ -72,7 +72,7 @@ extension UIAlertController {
/// - style: action style (default is UIAlertActionStyle.default)
/// - isEnabled: isEnabled status for action (default is true)
/// - handler: optional action handler to be called when button is tapped (default is nil)
- func addAction(image: UIImage? = nil, title: String, color: UIColor? = nil, style: UIAlertActionStyle = .default, isEnabled: Bool = true, handler: ((UIAlertAction) -> Void)? = nil) {
+ func addAction(image: UIImage? = nil, title: String, color: UIColor? = nil, style: UIAlertAction.Style = .default, isEnabled: Bool = true, handler: ((UIAlertAction) -> Void)? = nil) {
//let isPad: Bool = UIDevice.current.userInterfaceIdiom == .pad
//let action = UIAlertAction(title: title, style: isPad && style == .cancel ? .default : style, handler: handler)
let action = UIAlertAction(title: title, style: style, handler: handler)
@@ -106,7 +106,7 @@ extension UIAlertController {
func setTitle(font: UIFont, color: UIColor) {
guard let title = self.title else { return }
- let attributes: [NSAttributedStringKey: Any] = [.font: font, .foregroundColor: color]
+ let attributes: [NSAttributedString.Key: Any] = [.font: font, .foregroundColor: color]
let attributedTitle = NSMutableAttributedString(string: title, attributes: attributes)
setValue(attributedTitle, forKey: "attributedTitle")
}
@@ -126,7 +126,7 @@ extension UIAlertController {
func setMessage(font: UIFont, color: UIColor) {
guard let message = self.message else { return }
- let attributes: [NSAttributedStringKey: Any] = [.font: font, .foregroundColor: color]
+ let attributes: [NSAttributedString.Key: Any] = [.font: font, .foregroundColor: color]
let attributedMessage = NSMutableAttributedString(string: message, attributes: attributes)
setValue(attributedMessage, forKey: "attributedMessage")
}
diff --git a/Source/Extensions/UIColor+Extensions.swift b/Source/Extensions/UIColor+Extensions.swift
index 62747ece..000d2799 100644
--- a/Source/Extensions/UIColor+Extensions.swift
+++ b/Source/Extensions/UIColor+Extensions.swift
@@ -146,7 +146,7 @@ public extension UIColor {
/// - green: green component.
/// - blue: blue component.
/// - transparency: optional transparency value (default is 1)
- public convenience init(red: Int, green: Int, blue: Int, transparency: CGFloat = 1) {
+ convenience init(red: Int, green: Int, blue: Int, transparency: CGFloat = 1) {
assert(red >= 0 && red <= 255, "Invalid red component")
assert(green >= 0 && green <= 255, "Invalid green component")
assert(blue >= 0 && blue <= 255, "Invalid blue component")
diff --git a/Source/Extensions/UIImageView+Extensions.swift b/Source/Extensions/UIImageView+Extensions.swift
index 3a44b706..5123efbe 100644
--- a/Source/Extensions/UIImageView+Extensions.swift
+++ b/Source/Extensions/UIImageView+Extensions.swift
@@ -9,7 +9,7 @@ extension UIImageView {
/// - color: This optional paramter sets the background of the image. By default, a random color will be generated.
/// - circular: This boolean will determine if the image view will be clipped to a circular shape.
/// - textAttributes: This dictionary allows you to specify font, text color, shadow properties, etc.
- open func setImage(string: String?, color: UIColor? = nil, circular: Bool = false, textAttributes: [NSAttributedStringKey: Any]? = nil) {
+ open func setImage(string: String?, color: UIColor? = nil, circular: Bool = false, textAttributes: [NSAttributedString.Key: Any]? = nil) {
let image = imageSnap(text: string != nil ? string?.initials : "", color: color ?? UIColor.random, circular: circular, textAttributes: textAttributes)
@@ -18,7 +18,7 @@ extension UIImageView {
}
}
- private func imageSnap(text: String?, color: UIColor, circular: Bool, textAttributes: [NSAttributedStringKey: Any]?) -> UIImage? {
+ private func imageSnap(text: String?, color: UIColor, circular: Bool, textAttributes: [NSAttributedString.Key: Any]?) -> UIImage? {
let scale = Float(UIScreen.main.scale)
var size = bounds.size
@@ -41,7 +41,7 @@ extension UIImageView {
// Text
if let text = text {
- let attributes: [NSAttributedStringKey: Any] = textAttributes ?? [.foregroundColor: UIColor.white, .font: UIFont.systemFont(ofSize: 15.0)]
+ let attributes: [NSAttributedString.Key: Any] = textAttributes ?? [.foregroundColor: UIColor.white, .font: UIFont.systemFont(ofSize: 15.0)]
let textSize = text.size(withAttributes: attributes)
let bounds = self.bounds
@@ -91,24 +91,24 @@ let kGradientBotomOffset: HSVOffset = (hue: 0.025, saturation: -0.05, brightness
extension UIImageView {
- public func setImageForName(string: String, backgroundColor: UIColor? = nil, circular: Bool, textAttributes: [NSAttributedStringKey: AnyObject]?, gradient: Bool = false) {
+ public func setImageForName(string: String, backgroundColor: UIColor? = nil, circular: Bool, textAttributes: [NSAttributedString.Key: AnyObject]?, gradient: Bool = false) {
setImageForName(string: string, backgroundColor: backgroundColor, circular: circular, textAttributes: textAttributes, gradient: gradient, gradientColors: nil)
}
- public func setImageForName(string: String, gradientColors: GradientColors? = nil, circular: Bool = true, textAttributes: [NSAttributedStringKey: AnyObject]? = nil) {
+ public func setImageForName(string: String, gradientColors: GradientColors? = nil, circular: Bool = true, textAttributes: [NSAttributedString.Key: AnyObject]? = nil) {
setImageForName(string: string, backgroundColor: nil, circular: circular, textAttributes: textAttributes, gradient: true, gradientColors: gradientColors)
}
- public func setImageForName(string: String, backgroundColor: UIColor? = nil, circular: Bool, textAttributes: [NSAttributedStringKey: AnyObject]? = nil, gradient: Bool = false, gradientColors: GradientColors? = nil) {
+ public func setImageForName(string: String, backgroundColor: UIColor? = nil, circular: Bool, textAttributes: [NSAttributedString.Key: AnyObject]? = nil, gradient: Bool = false, gradientColors: GradientColors? = nil) {
let initials: String = initialsFromString(string: string)
let color: UIColor = (backgroundColor != nil) ? backgroundColor! : randomColor(for: string)
let gradientColors = gradientColors ?? topAndBottomColors(for: color)
- let attributes: [NSAttributedStringKey: AnyObject] = (textAttributes != nil) ? textAttributes! : [
- NSAttributedStringKey.font: self.fontForFontName(name: nil),
- NSAttributedStringKey.foregroundColor: UIColor.white
+ let attributes: [NSAttributedString.Key: AnyObject] = (textAttributes != nil) ? textAttributes! : [
+ NSAttributedString.Key.font: self.fontForFontName(name: nil),
+ NSAttributedString.Key.foregroundColor: UIColor.white
]
self.image = imageSnapshot(text: initials, backgroundColor: color, circular: circular, textAttributes: attributes, gradient: gradient, gradientColors: gradientColors)
@@ -126,7 +126,7 @@ extension UIImageView {
}
- private func imageSnapshot(text imageText: String, backgroundColor: UIColor, circular: Bool, textAttributes: [NSAttributedStringKey : AnyObject], gradient: Bool, gradientColors: GradientColors) -> UIImage {
+ private func imageSnapshot(text imageText: String, backgroundColor: UIColor, circular: Bool, textAttributes: [NSAttributedString.Key : AnyObject], gradient: Bool, gradientColors: GradientColors) -> UIImage {
let scale: CGFloat = UIScreen.main.scale
diff --git a/Source/Extensions/UISegmentedControl+Extensions.swift b/Source/Extensions/UISegmentedControl+Extensions.swift
index 9775cb4e..4acf0522 100644
--- a/Source/Extensions/UISegmentedControl+Extensions.swift
+++ b/Source/Extensions/UISegmentedControl+Extensions.swift
@@ -3,15 +3,15 @@ import UIKit
public extension UISegmentedControl {
/// Font of titles
- public func title(font: UIFont) {
- let attributes: [NSAttributedStringKey: Any] = [.font: font]
- setTitleTextAttributes(attributes, for: UIControlState())
+ func title(font: UIFont) {
+ let attributes: [NSAttributedString.Key: Any] = [.font: font]
+ setTitleTextAttributes(attributes, for: UIControl.State())
//setNeedsDisplay()
//layoutIfNeeded()
}
/// Segments titles.
- public var segmentTitles: [String?] {
+ var segmentTitles: [String?] {
get {
var titles: [String?] = []
var i = 0
@@ -30,7 +30,7 @@ public extension UISegmentedControl {
}
/// Segments images.
- public var segmentImages: [UIImage?] {
+ var segmentImages: [UIImage?] {
get {
var images: [UIImage?] = []
var i = 0
diff --git a/Source/Extensions/UITextField+Extensions.swift b/Source/Extensions/UITextField+Extensions.swift
index c72de82a..84895c4f 100644
--- a/Source/Extensions/UITextField+Extensions.swift
+++ b/Source/Extensions/UITextField+Extensions.swift
@@ -12,7 +12,7 @@ extension UITextField {
func left(image: UIImage?, color: UIColor = .black) {
if let image = image {
- leftViewMode = UITextFieldViewMode.always
+ leftViewMode = UITextField.ViewMode.always
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
imageView.contentMode = .scaleAspectFit
imageView.image = image
@@ -20,14 +20,14 @@ extension UITextField {
imageView.tintColor = color
leftView = imageView
} else {
- leftViewMode = UITextFieldViewMode.never
+ leftViewMode = UITextField.ViewMode.never
leftView = nil
}
}
func right(image: UIImage?, color: UIColor = .black) {
if let image = image {
- rightViewMode = UITextFieldViewMode.always
+ rightViewMode = UITextField.ViewMode.always
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
imageView.contentMode = .scaleAspectFit
imageView.image = image
@@ -35,7 +35,7 @@ extension UITextField {
imageView.tintColor = color
rightView = imageView
} else {
- rightViewMode = UITextFieldViewMode.never
+ rightViewMode = UITextField.ViewMode.never
rightView = nil
}
}
@@ -48,12 +48,12 @@ public extension UITextField {
/// Set placeholder text color.
///
/// - Parameter color: placeholder text color.
- public func setPlaceHolderTextColor(_ color: UIColor) {
- self.attributedPlaceholder = NSAttributedString(string:self.placeholder != nil ? self.placeholder! : "", attributes:[NSAttributedStringKey.foregroundColor: color])
+ func setPlaceHolderTextColor(_ color: UIColor) {
+ self.attributedPlaceholder = NSAttributedString(string:self.placeholder != nil ? self.placeholder! : "", attributes:[NSAttributedString.Key.foregroundColor: color])
}
/// Set placeholder text and its color
func placeholder(text value: String, color: UIColor = .red) {
- self.attributedPlaceholder = NSAttributedString(string: value, attributes: [ NSAttributedStringKey.foregroundColor : color])
+ self.attributedPlaceholder = NSAttributedString(string: value, attributes: [ NSAttributedString.Key.foregroundColor : color])
}
}
diff --git a/Source/Extensions/UITextView+Extensions.swift b/Source/Extensions/UITextView+Extensions.swift
index 853b6296..d0251674 100755
--- a/Source/Extensions/UITextView+Extensions.swift
+++ b/Source/Extensions/UITextView+Extensions.swift
@@ -4,13 +4,13 @@ import UIKit
public extension UITextView {
/// Scroll to the bottom of text view
- public func scrollToBottom() {
+ func scrollToBottom() {
let range = NSMakeRange((text as NSString).length - 1, 1)
scrollRangeToVisible(range)
}
/// Scroll to the top of text view
- public func scrollToTop() {
+ func scrollToTop() {
let range = NSMakeRange(0, 1)
scrollRangeToVisible(range)
}
diff --git a/Source/Extensions/UIView+Extensions.swift b/Source/Extensions/UIView+Extensions.swift
index 10f754c5..d6161be0 100644
--- a/Source/Extensions/UIView+Extensions.swift
+++ b/Source/Extensions/UIView+Extensions.swift
@@ -158,7 +158,7 @@ extension UIView {
public extension UIView {
/// Size of view.
- public var size: CGSize {
+ var size: CGSize {
get {
return self.frame.size
}
@@ -169,7 +169,7 @@ public extension UIView {
}
/// Width of view.
- public var width: CGFloat {
+ var width: CGFloat {
get {
return self.frame.size.width
}
@@ -179,7 +179,7 @@ public extension UIView {
}
/// Height of view.
- public var height: CGFloat {
+ var height: CGFloat {
get {
return self.frame.size.height
}
@@ -202,9 +202,9 @@ extension UIView {
public extension UIView {
- public typealias Configuration = (UIView) -> Swift.Void
+ typealias Configuration = (UIView) -> Swift.Void
- public func config(configurate: Configuration?) {
+ func config(configurate: Configuration?) {
configurate?(self)
}
@@ -213,7 +213,7 @@ public extension UIView {
/// - Parameters:
/// - corners: array of corners to change (example: [.bottomLeft, .topRight]).
/// - radius: radius for selected corners.
- public func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
+ func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
let maskPath = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let shape = CAShapeLayer()
shape.path = maskPath.cgPath
diff --git a/Source/Pickers/Contacts/ContactsPickerViewController.swift b/Source/Pickers/Contacts/ContactsPickerViewController.swift
index af25d4db..8333bc45 100644
--- a/Source/Pickers/Contacts/ContactsPickerViewController.swift
+++ b/Source/Pickers/Contacts/ContactsPickerViewController.swift
@@ -169,7 +169,7 @@ final class ContactsPickerViewController: UIViewController {
let productName = Bundle.main.infoDictionary!["CFBundleName"]!
let alert = UIAlertController(style: .alert, title: "Permission denied", message: "\(productName) does not have access to contacts. Please, allow the application to access to your contacts.")
alert.addAction(title: "Settings", style: .destructive) { action in
- if let settingsURL = URL(string: UIApplicationOpenSettingsURLString) {
+ if let settingsURL = URL(string: UIApplication.openSettingsURLString) {
UIApplication.shared.open(settingsURL)
}
}
@@ -177,6 +177,8 @@ final class ContactsPickerViewController: UIViewController {
self.alertController?.dismiss(animated: true)
}
alert.show()
+ @unknown default:
+ fatalError()
}
}
@@ -298,7 +300,7 @@ extension ContactsPickerViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int {
if searchController.isActive { return 0 }
tableView.scrollToRow(at: IndexPath(row: 0, section: index), at: .top , animated: false)
- return sortedContactKeys.index(of: title)!
+ return sortedContactKeys.firstIndex(of: title)!
}
func sectionIndexTitles(for tableView: UITableView) -> [String]? {
diff --git a/Source/Pickers/Contacts/Managers/Contacts.swift b/Source/Pickers/Contacts/Managers/Contacts.swift
index 1d8e7c77..49acdc81 100644
--- a/Source/Pickers/Contacts/Managers/Contacts.swift
+++ b/Source/Pickers/Contacts/Managers/Contacts.swift
@@ -5,6 +5,14 @@ import CoreTelephony
/// https://github.com/satishbabariya/SwiftyContacts
+extension String.Index {
+
+ public func utf16Offset(in s: S) -> Int {
+ return s.utf16.distance(from: s.utf16.startIndex, to: self)
+ }
+
+}
+
public struct Contacts {
/// Result Enum
@@ -168,8 +176,8 @@ public struct Contacts {
let contactStore: CNContactStore = CNContactStore()
var contacts: [CNContact] = [CNContact]()
let predicate: NSPredicate
-
- if string.endIndex.encodedOffset > 0 {
+
+ if string.endIndex.utf16Offset(in: string) > 0 {
predicate = CNContact.predicateForContacts(matchingName: string)
} else {
predicate = CNContact.predicateForContactsInContainer(withIdentifier: CNContactStore().defaultContainerIdentifier())
@@ -202,7 +210,6 @@ public struct Contacts {
}
}
-
public struct Telephone {
// PRAGMA MARK: - CoreTelephonyCheck
@@ -256,7 +263,7 @@ public struct Telephone {
return
}
if #available(iOS 10.0, *) {
- UIApplication.shared.open(url, options: [:], completionHandler: nil)
+ UIApplication.shared.open(url, options: convertToUIApplicationOpenExternalURLOptionsKeyDictionary([:]), completionHandler: nil)
} else {
// Fallback on earlier versions
UIApplication.shared.openURL(url)
@@ -264,3 +271,8 @@ public struct Telephone {
}
}
}
+
+// Helper function inserted by Swift 4.2 migrator.
+fileprivate func convertToUIApplicationOpenExternalURLOptionsKeyDictionary(_ input: [String: Any]) -> [UIApplication.OpenExternalURLOptionsKey: Any] {
+ return Dictionary(uniqueKeysWithValues: input.map { key, value in (UIApplication.OpenExternalURLOptionsKey(rawValue: key), value)})
+}
diff --git a/Source/Pickers/Contacts/Views/ContactCell.swift b/Source/Pickers/Contacts/Views/ContactCell.swift
index a4297ab0..c9bd703b 100644
--- a/Source/Pickers/Contacts/Views/ContactCell.swift
+++ b/Source/Pickers/Contacts/Views/ContactCell.swift
@@ -11,7 +11,7 @@ final class ContactTableViewCell: UITableViewCell {
// MARK: Initialize
- override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
+ override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
selectionStyle = .none
backgroundColor = nil
diff --git a/Source/Pickers/Date/DatePickerViewController.swift b/Source/Pickers/Date/DatePickerViewController.swift
index ac6bf256..91bba9b5 100644
--- a/Source/Pickers/Date/DatePickerViewController.swift
+++ b/Source/Pickers/Date/DatePickerViewController.swift
@@ -11,7 +11,7 @@ extension UIAlertController {
/// - maximumDate: maximum date of date picker
/// - action: an action for datePicker value change
- func addDatePicker(mode: UIDatePickerMode, date: Date?, minimumDate: Date? = nil, maximumDate: Date? = nil, action: DatePickerViewController.Action?) {
+ func addDatePicker(mode: UIDatePicker.Mode, date: Date?, minimumDate: Date? = nil, maximumDate: Date? = nil, action: DatePickerViewController.Action?) {
let datePicker = DatePickerViewController(mode: mode, date: date, minimumDate: minimumDate, maximumDate: maximumDate, action: action)
set(vc: datePicker, height: 217)
}
@@ -28,7 +28,7 @@ final class DatePickerViewController: UIViewController {
return $0
}(UIDatePicker())
- required init(mode: UIDatePickerMode, date: Date? = nil, minimumDate: Date? = nil, maximumDate: Date? = nil, action: Action?) {
+ required init(mode: UIDatePicker.Mode, date: Date? = nil, minimumDate: Date? = nil, maximumDate: Date? = nil, action: Action?) {
super.init(nibName: nil, bundle: nil)
datePicker.datePickerMode = mode
datePicker.date = date ?? Date()
diff --git a/Source/Pickers/Image/ImagePickerViewController.swift b/Source/Pickers/Image/ImagePickerViewController.swift
index 764e8811..9b35927f 100644
--- a/Source/Pickers/Image/ImagePickerViewController.swift
+++ b/Source/Pickers/Image/ImagePickerViewController.swift
@@ -10,7 +10,7 @@ extension UIAlertController {
/// - images: for content to select
/// - selection: type and action for selection of image/images
- func addImagePicker(flow: UICollectionViewScrollDirection, paging: Bool, images: [UIImage], selection: ImagePickerViewController.SelectionType? = nil) {
+ func addImagePicker(flow: UICollectionView.ScrollDirection, paging: Bool, images: [UIImage], selection: ImagePickerViewController.SelectionType? = nil) {
let vc = ImagePickerViewController(flow: flow, paging: paging, images: images, selection: selection)
if UIDevice.current.userInterfaceIdiom == .pad {
@@ -48,7 +48,9 @@ final class ImagePickerViewController: UIViewController {
switch layout.scrollDirection {
case .vertical: return UIDevice.current.userInterfaceIdiom == .pad ? 3 : 2
case .horizontal: return 1
- }
+ @unknown default:
+ fatalError()
+ }
}
var itemSize: CGSize {
@@ -57,6 +59,8 @@ final class ImagePickerViewController: UIViewController {
return CGSize(width: view.bounds.width / columns, height: view.bounds.width / columns)
case .horizontal:
return CGSize(width: view.bounds.width, height: view.bounds.height / columns)
+ @unknown default:
+ fatalError()
}
}
@@ -68,7 +72,7 @@ final class ImagePickerViewController: UIViewController {
$0.register(ItemWithImage.self, forCellWithReuseIdentifier: ItemWithImage.identifier)
$0.showsVerticalScrollIndicator = false
$0.showsHorizontalScrollIndicator = false
- $0.decelerationRate = UIScrollViewDecelerationRateFast
+ $0.decelerationRate = UIScrollView.DecelerationRate.fast
$0.contentInsetAdjustmentBehavior = .never
$0.bounces = false
$0.backgroundColor = .clear
@@ -90,7 +94,7 @@ final class ImagePickerViewController: UIViewController {
// MARK: Initialize
- required init(flow: UICollectionViewScrollDirection, paging: Bool, images: [UIImage], selection: SelectionType?) {
+ required init(flow: UICollectionView.ScrollDirection, paging: Bool, images: [UIImage], selection: SelectionType?) {
super.init(nibName: nil, bundle: nil)
self.images = images
self.selection = selection
diff --git a/Source/Pickers/Locale/LocalePickerViewController.swift b/Source/Pickers/Locale/LocalePickerViewController.swift
index a0091190..aac64fa9 100644
--- a/Source/Pickers/Locale/LocalePickerViewController.swift
+++ b/Source/Pickers/Locale/LocalePickerViewController.swift
@@ -84,7 +84,7 @@ final class LocalePickerViewController: UIViewController {
fileprivate lazy var indicatorView: UIActivityIndicatorView = {
$0.color = .lightGray
return $0
- }(UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge))
+ }(UIActivityIndicatorView(style: .whiteLarge))
// MARK: Initialize
@@ -297,7 +297,7 @@ extension LocalePickerViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int {
if searchController.isActive { return 0 }
tableView.scrollToRow(at: IndexPath(row: 0, section: index), at: .top , animated: false)
- return sortedInfoKeys.index(of: title)!
+ return sortedInfoKeys.firstIndex(of: title)!
}
func sectionIndexTitles(for tableView: UITableView) -> [String]? {
diff --git a/Source/Pickers/Locale/Views/CountryCell.swift b/Source/Pickers/Locale/Views/CountryCell.swift
index dc04c673..4556f368 100644
--- a/Source/Pickers/Locale/Views/CountryCell.swift
+++ b/Source/Pickers/Locale/Views/CountryCell.swift
@@ -9,7 +9,7 @@ final class CountryTableViewCell: UITableViewCell {
// MARK: Initialize
- override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
+ override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: .default, reuseIdentifier: reuseIdentifier)
selectionStyle = .none
backgroundColor = nil
diff --git a/Source/Pickers/Locale/Views/CurrencyCell.swift b/Source/Pickers/Locale/Views/CurrencyCell.swift
index b0ad0336..c377261a 100644
--- a/Source/Pickers/Locale/Views/CurrencyCell.swift
+++ b/Source/Pickers/Locale/Views/CurrencyCell.swift
@@ -4,7 +4,7 @@ final class CurrencyTableViewCell: UITableViewCell {
static let identifier = String(describing: CurrencyTableViewCell.self)
- override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
+ override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
selectionStyle = .none
backgroundColor = nil
diff --git a/Source/Pickers/Locale/Views/PhoneCodeCell.swift b/Source/Pickers/Locale/Views/PhoneCodeCell.swift
index d2abcec1..1fd4bd28 100644
--- a/Source/Pickers/Locale/Views/PhoneCodeCell.swift
+++ b/Source/Pickers/Locale/Views/PhoneCodeCell.swift
@@ -4,7 +4,7 @@ final class PhoneCodeTableViewCell: UITableViewCell {
static let identifier = String(describing: PhoneCodeTableViewCell.self)
- override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
+ override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
selectionStyle = .none
backgroundColor = nil
diff --git a/Source/Pickers/Location/LocationPickerViewController.swift b/Source/Pickers/Location/LocationPickerViewController.swift
index 512ac5a4..dbd9c233 100755
--- a/Source/Pickers/Location/LocationPickerViewController.swift
+++ b/Source/Pickers/Location/LocationPickerViewController.swift
@@ -90,7 +90,7 @@ final class LocationPickerViewController: UIViewController {
$0.backgroundColor = UIColor.white.withAlphaComponent(0.8)
$0.maskToBounds = true
$0.cornerRadius = 22
- $0.setImage(#imageLiteral(resourceName: "geolocation"), for: UIControlState())
+ $0.setImage(#imageLiteral(resourceName: "geolocation"), for: UIControl.State())
$0.addTarget(self, action: #selector(LocationPickerViewController.currentLocationPressed),
for: .touchUpInside)
return $0
@@ -129,11 +129,11 @@ final class LocationPickerViewController: UIViewController {
let _ = searchController.view
}
- open override func loadView() {
+ public override func loadView() {
view = mapView
}
- open override func viewDidLoad() {
+ public override func viewDidLoad() {
super.viewDidLoad()
mapView.addSubview(scaleView)
@@ -167,7 +167,7 @@ final class LocationPickerViewController: UIViewController {
var presentedInitialLocation = false
- override open func viewWillLayoutSubviews() {
+ override public func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
searchView.frame = CGRect(x: 8, y: 8, width: view.width - 16, height: 57)
//searchController.searchBar.sizeToFit()
@@ -176,7 +176,7 @@ final class LocationPickerViewController: UIViewController {
}
- override open func viewDidLayoutSubviews() {
+ override public func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
preferredContentSize.height = UIScreen.main.bounds.height
@@ -237,7 +237,7 @@ final class LocationPickerViewController: UIViewController {
}
func showCoordinates(_ coordinate: CLLocationCoordinate2D, animated: Bool = true) {
- let region = MKCoordinateRegionMakeWithDistance(coordinate, resultRegionDistance, resultRegionDistance)
+ let region = MKCoordinateRegion.init(center: coordinate, latitudinalMeters: resultRegionDistance, longitudinalMeters: resultRegionDistance)
mapView.setRegion(region, animated: animated)
}
@@ -314,7 +314,7 @@ extension LocationPickerViewController: UISearchResultsUpdating {
let term = userInfo[LocationPickerViewController.SearchTermKey] as? String
else { return }
- let request = MKLocalSearchRequest()
+ let request = MKLocalSearch.Request()
request.naturalLanguageQuery = term
if let location = locationManager.location, useCurrentLocationAsHint {
@@ -329,7 +329,7 @@ extension LocationPickerViewController: UISearchResultsUpdating {
}
}
- func showItemsForSearchResult(_ searchResult: MKLocalSearchResponse?) {
+ func showItemsForSearchResult(_ searchResult: MKLocalSearch.Response?) {
results.locations = searchResult?.mapItems.map { Location(name: $0.name, placemark: $0.placemark) } ?? []
results.isShowingHistory = false
results.tableView.reloadData()
@@ -382,13 +382,13 @@ extension LocationPickerViewController: MKMapViewDelegate {
func selectLocationButton() -> UIButton {
let button = UIButton(frame: CGRect(x: 0, y: 0, width: 70, height: 30))
- button.setTitle(selectButtonTitle, for: UIControlState())
+ button.setTitle(selectButtonTitle, for: UIControl.State())
if let titleLabel = button.titleLabel {
let width = titleLabel.textRect(forBounds: CGRect(x: 0, y: 0, width: Int.max, height: 30), limitedToNumberOfLines: 1).width
button.frame.size = CGSize(width: width + 10, height: 30.0)
}
button.backgroundColor = UIColor(hex: 0x007AFF)
- button.setTitleColor(.white, for: UIControlState())
+ button.setTitleColor(.white, for: UIControl.State())
button.borderWidth = 2
button.borderColor = UIColor(hex: 0x007AFF)
button.cornerRadius = 5
diff --git a/Source/Pickers/Location/Managers/SearchHistoryManager.swift b/Source/Pickers/Location/Managers/SearchHistoryManager.swift
index 4853926e..4e0a4de5 100755
--- a/Source/Pickers/Location/Managers/SearchHistoryManager.swift
+++ b/Source/Pickers/Location/Managers/SearchHistoryManager.swift
@@ -9,14 +9,14 @@ struct SearchHistoryManager {
func history() -> [Location] {
let history = defaults.object(forKey: HistoryKey) as? [NSDictionary] ?? []
- return history.flatMap(Location.fromDefaultsDic)
+ return history.compactMap(Location.fromDefaultsDic)
}
func addToHistory(_ location: Location) {
guard let dic = location.toDefaultsDic() else { return }
var history = defaults.object(forKey: HistoryKey) as? [NSDictionary] ?? []
- let historyNames = history.flatMap { $0[LocationDicKeys.name] as? String }
+ let historyNames = history.compactMap { $0[LocationDicKeys.name] as? String }
let alreadyInHistory = location.name.flatMap(historyNames.contains) ?? false
if !alreadyInHistory {
history.insert(dic, at: 0)
diff --git a/Source/Pickers/Location/Models/Address.swift b/Source/Pickers/Location/Models/Address.swift
index 869dabe9..4cdd60dc 100644
--- a/Source/Pickers/Location/Models/Address.swift
+++ b/Source/Pickers/Location/Models/Address.swift
@@ -41,14 +41,14 @@ struct Address {
}
var line: String? {
- return [line1, line2].flatMap{$0}.joined(separator: ", ")
+ return [line1, line2].compactMap{$0}.joined(separator: ", ")
}
var line1: String? {
- return [[building, street].flatMap{$0}.joined(separator: " "), apt].flatMap{$0}.joined(separator: ", ")
+ return [[building, street].compactMap{$0}.joined(separator: " "), apt].compactMap{$0}.joined(separator: ", ")
}
var line2: String? {
- return [[city, zip].flatMap{$0}.joined(separator: " "), country].flatMap{$0}.joined(separator: ", ")
+ return [[city, zip].compactMap{$0}.joined(separator: " "), country].compactMap{$0}.joined(separator: ", ")
}
}
diff --git a/Source/Pickers/PhotoLibrary/PhotoLibraryPickerViewController.swift b/Source/Pickers/PhotoLibrary/PhotoLibraryPickerViewController.swift
index 05bc9eb6..52e55084 100644
--- a/Source/Pickers/PhotoLibrary/PhotoLibraryPickerViewController.swift
+++ b/Source/Pickers/PhotoLibrary/PhotoLibraryPickerViewController.swift
@@ -12,7 +12,7 @@ extension UIAlertController {
/// - images: for content to select
/// - selection: type and action for selection of image/images
- func addPhotoLibraryPicker(flow: UICollectionViewScrollDirection, paging: Bool, selection: PhotoLibraryPickerViewController.Selection) {
+ func addPhotoLibraryPicker(flow: UICollectionView.ScrollDirection, paging: Bool, selection: PhotoLibraryPickerViewController.Selection) {
let selection: PhotoLibraryPickerViewController.Selection = selection
var asset: PHAsset?
var assets: [PHAsset] = []
@@ -76,6 +76,8 @@ final class PhotoLibraryPickerViewController: UIViewController {
switch layout.scrollDirection {
case .vertical: return UIDevice.current.userInterfaceIdiom == .pad ? 3 : 2
case .horizontal: return 1
+ @unknown default:
+ fatalError()
}
}
@@ -85,6 +87,8 @@ final class PhotoLibraryPickerViewController: UIViewController {
return CGSize(width: view.bounds.width / columns, height: view.bounds.width / columns)
case .horizontal:
return CGSize(width: view.bounds.width, height: view.bounds.height / columns)
+ @unknown default:
+ fatalError()
}
}
@@ -96,7 +100,7 @@ final class PhotoLibraryPickerViewController: UIViewController {
$0.register(ItemWithImage.self, forCellWithReuseIdentifier: String(describing: ItemWithImage.self))
$0.showsVerticalScrollIndicator = false
$0.showsHorizontalScrollIndicator = false
- $0.decelerationRate = UIScrollViewDecelerationRateFast
+ $0.decelerationRate = UIScrollView.DecelerationRate.fast
$0.contentInsetAdjustmentBehavior = .always
$0.bounces = true
$0.backgroundColor = .clear
@@ -118,7 +122,7 @@ final class PhotoLibraryPickerViewController: UIViewController {
// MARK: Initialize
- required public init(flow: UICollectionViewScrollDirection, paging: Bool, selection: Selection) {
+ required public init(flow: UICollectionView.ScrollDirection, paging: Bool, selection: Selection) {
super.init(nibName: nil, bundle: nil)
self.selection = selection
@@ -180,7 +184,7 @@ final class PhotoLibraryPickerViewController: UIViewController {
let productName = Bundle.main.infoDictionary!["CFBundleName"]!
let alert = UIAlertController(style: .alert, title: "Permission denied", message: "\(productName) does not have access to contacts. Please, allow the application to access to your photo library.")
alert.addAction(title: "Settings", style: .destructive) { action in
- if let settingsURL = URL(string: UIApplicationOpenSettingsURLString) {
+ if let settingsURL = URL(string: UIApplication.openSettingsURLString) {
UIApplication.shared.open(settingsURL)
}
}
@@ -188,6 +192,8 @@ final class PhotoLibraryPickerViewController: UIViewController {
self.alertController?.dismiss(animated: true)
}
alert.show()
+ @unknown default:
+ fatalError()
}
}
diff --git a/Source/Pickers/Telegram/TelegramPickerViewController.swift b/Source/Pickers/Telegram/TelegramPickerViewController.swift
index e568a651..ddef51a9 100644
--- a/Source/Pickers/Telegram/TelegramPickerViewController.swift
+++ b/Source/Pickers/Telegram/TelegramPickerViewController.swift
@@ -102,7 +102,7 @@ final class TelegramPickerViewController: UIViewController {
$0.allowsMultipleSelection = true
$0.showsVerticalScrollIndicator = false
$0.showsHorizontalScrollIndicator = false
- $0.decelerationRate = UIScrollViewDecelerationRateFast
+ $0.decelerationRate = UIScrollView.DecelerationRate.fast
$0.contentInsetAdjustmentBehavior = .never
$0.contentInset = UI.insets
$0.backgroundColor = .clear
@@ -212,7 +212,7 @@ final class TelegramPickerViewController: UIViewController {
let productName = Bundle.main.infoDictionary!["CFBundleName"]!
let alert = UIAlertController(style: .alert, title: "Permission denied", message: "\(productName) does not have access to contacts. Please, allow the application to access to your photo library.")
alert.addAction(title: "Settings", style: .destructive) { action in
- if let settingsURL = URL(string: UIApplicationOpenSettingsURLString) {
+ if let settingsURL = URL(string: UIApplication.openSettingsURLString) {
UIApplication.shared.open(settingsURL)
}
}
@@ -220,6 +220,8 @@ final class TelegramPickerViewController: UIViewController {
self.alertController?.dismiss(animated: true)
}
alert.show()
+ @unknown default:
+ fatalError()
}
}
diff --git a/Source/Pickers/Telegram/Views/LikeButtonCell.swift b/Source/Pickers/Telegram/Views/LikeButtonCell.swift
index 3b3786f8..847e73dd 100644
--- a/Source/Pickers/Telegram/Views/LikeButtonCell.swift
+++ b/Source/Pickers/Telegram/Views/LikeButtonCell.swift
@@ -9,7 +9,7 @@ final class LikeButtonCell: UITableViewCell {
// MARK: Initialize
- override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
+ override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: .default, reuseIdentifier: reuseIdentifier)
selectionStyle = .none
backgroundColor = nil
diff --git a/Source/Viewers/Models/AttributedTextBlock.swift b/Source/Viewers/Models/AttributedTextBlock.swift
index e6c3c71c..113549e9 100644
--- a/Source/Viewers/Models/AttributedTextBlock.swift
+++ b/Source/Viewers/Models/AttributedTextBlock.swift
@@ -11,16 +11,16 @@ public enum AttributedTextBlock {
let attributedString: NSMutableAttributedString
switch self {
case .header1(let value):
- let attributes: [NSAttributedStringKey: Any] = [.font: UIFont.boldSystemFont(ofSize: 20), .foregroundColor: UIColor.black]
+ let attributes: [NSAttributedString.Key: Any] = [.font: UIFont.boldSystemFont(ofSize: 20), .foregroundColor: UIColor.black]
attributedString = NSMutableAttributedString(string: value, attributes: attributes)
case .header2(let value):
- let attributes: [NSAttributedStringKey: Any] = [.font: UIFont.boldSystemFont(ofSize: 18), .foregroundColor: UIColor.black]
+ let attributes: [NSAttributedString.Key: Any] = [.font: UIFont.boldSystemFont(ofSize: 18), .foregroundColor: UIColor.black]
attributedString = NSMutableAttributedString(string: value, attributes: attributes)
case .normal(let value):
- let attributes: [NSAttributedStringKey: Any] = [.font: UIFont.systemFont(ofSize: 15), .foregroundColor: UIColor.black]
+ let attributes: [NSAttributedString.Key: Any] = [.font: UIFont.systemFont(ofSize: 15), .foregroundColor: UIColor.black]
attributedString = NSMutableAttributedString(string: value, attributes: attributes)
case .list(let value):
- let attributes: [NSAttributedStringKey: Any] = [.font: UIFont.systemFont(ofSize: 15), .foregroundColor: UIColor.black]
+ let attributes: [NSAttributedString.Key: Any] = [.font: UIFont.systemFont(ofSize: 15), .foregroundColor: UIColor.black]
attributedString = NSMutableAttributedString(string: "∙ " + value, attributes: attributes)
}
let paragraphStyle = NSMutableParagraphStyle()
diff --git a/Source/Viewers/TextViewController.swift b/Source/Viewers/TextViewController.swift
index 4e0d45a3..9f62e2af 100644
--- a/Source/Viewers/TextViewController.swift
+++ b/Source/Viewers/TextViewController.swift
@@ -46,7 +46,7 @@ final class TextViewerViewController: UIViewController {
case .attributedText(let text):
textView.attributedText = text.map { $0.text }.joined(separator: "\n")
}
- textView.textContainerInset = UIEdgeInsetsMake(UI.hInset, UI.vInset, UI.hInset, UI.vInset)
+ textView.textContainerInset = UIEdgeInsets.init(top: UI.hInset, left: UI.vInset, bottom: UI.hInset, right: UI.vInset)
//preferredContentSize.height = self.textView.contentSize.height
}
diff --git a/Source/Views/GradientSlider.swift b/Source/Views/GradientSlider.swift
index 96925845..fc713bde 100755
--- a/Source/Views/GradientSlider.swift
+++ b/Source/Views/GradientSlider.swift
@@ -276,11 +276,11 @@ import UIKit
//MARK: - Layout
override open var intrinsicContentSize: CGSize {
- return CGSize(width: UIViewNoIntrinsicMetric, height: thumbSize)
+ return CGSize(width: UIView.noIntrinsicMetric, height: thumbSize)
}
override open var alignmentRectInsets: UIEdgeInsets {
- return UIEdgeInsetsMake(4.0, 2.0, 4.0, 2.0)
+ return UIEdgeInsets.init(top: 4.0, left: 2.0, bottom: 4.0, right: 2.0)
}
override open func layoutSublayers(of layer: CALayer) {
@@ -358,7 +358,7 @@ import UIKit
set(value: newValue, animated: false)
}
actionBlock(self,_value)
- sendActions(for: [UIControlEvents.valueChanged, UIControlEvents.touchUpInside])
+ sendActions(for: [UIControl.Event.valueChanged, UIControl.Event.touchUpInside])
}
diff --git a/Source/Views/Label.swift b/Source/Views/Label.swift
index c7e9f003..b23b1ecd 100644
--- a/Source/Views/Label.swift
+++ b/Source/Views/Label.swift
@@ -9,7 +9,7 @@ open class Label: UILabel {
open var insets: UIEdgeInsets = .zero
override open func drawText(in rect: CGRect) {
- super.drawText(in: UIEdgeInsetsInsetRect(rect, insets))
+ super.drawText(in: rect.inset(by: insets))
}
// Override -intrinsicContentSize: for Auto layout code