Update to Swift 5

This commit is contained in:
Sami Samhuri 2022-02-16 23:22:46 -08:00
parent 8b288e8107
commit 5537aaa9bc
No known key found for this signature in database
GPG key ID: 4B4195422742FC16
7 changed files with 27 additions and 21 deletions

View file

@ -345,6 +345,7 @@
551B9BDC1AEB1C9700302388 = { 551B9BDC1AEB1C9700302388 = {
CreatedOnToolsVersion = 6.3; CreatedOnToolsVersion = 6.3;
DevelopmentTeam = X45WPY5JFZ; DevelopmentTeam = X45WPY5JFZ;
LastSwiftMigration = 1320;
SystemCapabilities = { SystemCapabilities = {
com.apple.iCloud = { com.apple.iCloud = {
enabled = 1; enabled = 1;
@ -581,7 +582,7 @@
PRODUCT_BUNDLE_IDENTIFIER = "net.samhuri.apple-samplecode.Earthquakes"; PRODUCT_BUNDLE_IDENTIFIER = "net.samhuri.apple-samplecode.Earthquakes";
PRODUCT_NAME = Earthquakes; PRODUCT_NAME = Earthquakes;
PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE = "";
SWIFT_VERSION = 4.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
}; };
name = Debug; name = Debug;
@ -599,7 +600,7 @@
PRODUCT_BUNDLE_IDENTIFIER = "net.samhuri.apple-samplecode.Earthquakes"; PRODUCT_BUNDLE_IDENTIFIER = "net.samhuri.apple-samplecode.Earthquakes";
PRODUCT_NAME = Earthquakes; PRODUCT_NAME = Earthquakes;
PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE = "";
SWIFT_VERSION = 4.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
}; };
name = Release; name = Release;

View file

@ -52,7 +52,7 @@ class AlertOperation: EarthquakeOperation {
addCondition(condition: MutuallyExclusive<UIViewController>()) addCondition(condition: MutuallyExclusive<UIViewController>())
} }
func addAction(title: String, style: UIAlertActionStyle = .default, handler: @escaping (AlertOperation) -> Void = { _ in }) { func addAction(title: String, style: UIAlertAction.Style = .default, handler: @escaping (AlertOperation) -> Void = { _ in }) {
let action = UIAlertAction(title: title, style: style) { [weak self] _ in let action = UIAlertAction(title: title, style: style) { [weak self] _ in
if let strongSelf = self { if let strongSelf = self {
handler(strongSelf) handler(strongSelf)

View file

@ -18,16 +18,16 @@ import UIKit
class BackgroundObserver: NSObject, OperationObserver { class BackgroundObserver: NSObject, OperationObserver {
// MARK: Properties // MARK: Properties
private var identifier = UIBackgroundTaskInvalid private var identifier = UIBackgroundTaskIdentifier.invalid
private var isInBackground = false private var isInBackground = false
override init() { override init() {
super.init() super.init()
// We need to know when the application moves to/from the background. // We need to know when the application moves to/from the background.
NotificationCenter.default.addObserver(self, selector: #selector(BackgroundObserver.didEnterBackground(notification:)), name: NSNotification.Name.UIApplicationDidEnterBackground, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(BackgroundObserver.didEnterBackground(notification:)), name: UIApplication.didEnterBackgroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(BackgroundObserver.didEnterForeground(notification:)), name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(BackgroundObserver.didEnterForeground(notification:)), name: UIApplication.didBecomeActiveNotification, object: nil)
isInBackground = UIApplication.shared.applicationState == .background isInBackground = UIApplication.shared.applicationState == .background
@ -56,7 +56,7 @@ class BackgroundObserver: NSObject, OperationObserver {
} }
private func startBackgroundTask() { private func startBackgroundTask() {
if identifier == UIBackgroundTaskInvalid { if identifier == UIBackgroundTaskIdentifier.invalid {
identifier = UIApplication.shared.beginBackgroundTask(withName: "BackgroundObserver", expirationHandler: { identifier = UIApplication.shared.beginBackgroundTask(withName: "BackgroundObserver", expirationHandler: {
self.endBackgroundTask() self.endBackgroundTask()
}) })
@ -64,9 +64,9 @@ class BackgroundObserver: NSObject, OperationObserver {
} }
private func endBackgroundTask() { private func endBackgroundTask() {
if identifier != UIBackgroundTaskInvalid { if identifier != UIBackgroundTaskIdentifier.invalid {
UIApplication.shared.endBackgroundTask(identifier) UIApplication.shared.endBackgroundTask(convertToUIBackgroundTaskIdentifier(identifier.rawValue))
identifier = UIBackgroundTaskInvalid identifier = UIBackgroundTaskIdentifier.invalid
} }
} }
@ -80,3 +80,8 @@ class BackgroundObserver: NSObject, OperationObserver {
endBackgroundTask() endBackgroundTask()
} }
} }
// Helper function inserted by Swift 4.2 migrator.
fileprivate func convertToUIBackgroundTaskIdentifier(_ input: Int) -> UIBackgroundTaskIdentifier {
return UIBackgroundTaskIdentifier(rawValue: input)
}

View file

@ -24,7 +24,7 @@ extension CKContainer {
operation fails. If the verification was successful, this value will operation fails. If the verification was successful, this value will
be `nil`. be `nil`.
*/ */
func verifyPermission(permission: CKApplicationPermissions, requestingIfNecessary shouldRequest: Bool = false, completion: @escaping (Error?) -> Void) { func verifyPermission(permission: CKContainer.ApplicationPermissions, requestingIfNecessary shouldRequest: Bool = false, completion: @escaping (Error?) -> Void) {
verifyAccountStatus(container: self, permission: permission, shouldRequest: shouldRequest, completion: completion) verifyAccountStatus(container: self, permission: permission, shouldRequest: shouldRequest, completion: completion)
} }
} }
@ -33,7 +33,7 @@ extension CKContainer {
Make these helper functions instead of helper methods, so we don't pollute Make these helper functions instead of helper methods, so we don't pollute
`CKContainer`. `CKContainer`.
*/ */
private func verifyAccountStatus(container: CKContainer, permission: CKApplicationPermissions, shouldRequest: Bool, completion: @escaping (Error?) -> Void) { private func verifyAccountStatus(container: CKContainer, permission: CKContainer.ApplicationPermissions, shouldRequest: Bool, completion: @escaping (Error?) -> Void) {
container.accountStatus { accountStatus, accountError in container.accountStatus { accountStatus, accountError in
if accountStatus == .available { if accountStatus == .available {
if permission != [] { if permission != [] {
@ -50,7 +50,7 @@ private func verifyAccountStatus(container: CKContainer, permission: CKApplicati
} }
} }
private func verifyPermission(container: CKContainer, permission: CKApplicationPermissions, shouldRequest: Bool, completion: @escaping (Error?) -> Void) { private func verifyPermission(container: CKContainer, permission: CKContainer.ApplicationPermissions, shouldRequest: Bool, completion: @escaping (Error?) -> Void) {
container.status(forApplicationPermission: permission) { permissionStatus, permissionError in container.status(forApplicationPermission: permission) { permissionStatus, permissionError in
if permissionStatus == .granted { if permissionStatus == .granted {
completion(nil) completion(nil)
@ -65,7 +65,7 @@ private func verifyPermission(container: CKContainer, permission: CKApplicationP
} }
} }
private func requestPermission(container: CKContainer, permission: CKApplicationPermissions, completion: @escaping (Error?) -> Void) { private func requestPermission(container: CKContainer, permission: CKContainer.ApplicationPermissions, completion: @escaping (Error?) -> Void) {
DispatchQueue.main.async { DispatchQueue.main.async {
container.requestApplicationPermission(permission) { requestStatus, requestError in container.requestApplicationPermission(permission) { requestStatus, requestError in
if requestStatus == .granted { if requestStatus == .granted {

View file

@ -23,7 +23,7 @@ struct CloudContainerCondition: OperationCondition {
let container: CKContainer // this is the container to which you need access. let container: CKContainer // this is the container to which you need access.
let permission: CKApplicationPermissions let permission: CKContainer.ApplicationPermissions
/** /**
- parameter container: the `CKContainer` to which you need access. - parameter container: the `CKContainer` to which you need access.
@ -31,7 +31,7 @@ struct CloudContainerCondition: OperationCondition {
container. This parameter has a default value of `[]`, which would get container. This parameter has a default value of `[]`, which would get
you anonymized read/write access. you anonymized read/write access.
*/ */
init(container: CKContainer, permission: CKApplicationPermissions = []) { init(container: CKContainer, permission: CKContainer.ApplicationPermissions = []) {
self.container = container self.container = container
self.permission = permission self.permission = permission
} }
@ -64,9 +64,9 @@ struct CloudContainerCondition: OperationCondition {
*/ */
private class CloudKitPermissionOperation: EarthquakeOperation { private class CloudKitPermissionOperation: EarthquakeOperation {
let container: CKContainer let container: CKContainer
let permission: CKApplicationPermissions let permission: CKContainer.ApplicationPermissions
init(container: CKContainer, permission: CKApplicationPermissions) { init(container: CKContainer, permission: CKContainer.ApplicationPermissions) {
self.container = container self.container = container
self.permission = permission self.permission = permission
super.init() super.init()

View file

@ -36,7 +36,7 @@ struct LocationCondition: OperationCondition {
func evaluateForOperation(operation: EarthquakeOperation, completion: (OperationConditionResult) -> Void) { func evaluateForOperation(operation: EarthquakeOperation, completion: (OperationConditionResult) -> Void) {
let enabled = CLLocationManager.locationServicesEnabled() let enabled = CLLocationManager.locationServicesEnabled()
let actual = CLLocationManager.authorizationStatus() let actual = CLLocationManager().authorizationStatus
var error: NSError? var error: NSError?
@ -101,7 +101,7 @@ private class LocationPermissionOperation: EarthquakeOperation {
Not only do we need to handle the "Not Determined" case, but we also Not only do we need to handle the "Not Determined" case, but we also
need to handle the "upgrade" (.WhenInUse -> .Always) case. need to handle the "upgrade" (.WhenInUse -> .Always) case.
*/ */
switch (CLLocationManager.authorizationStatus(), usage) { switch (CLLocationManager().authorizationStatus, usage) {
case (.notDetermined, _), (.authorizedWhenInUse, .Always): case (.notDetermined, _), (.authorizedWhenInUse, .Always):
DispatchQueue.main.async { DispatchQueue.main.async {
self.requestPermission() self.requestPermission()

View file

@ -14,7 +14,7 @@ class SplitViewController: UISplitViewController {
override func awakeFromNib() { override func awakeFromNib() {
super.awakeFromNib() super.awakeFromNib()
preferredDisplayMode = .allVisible preferredDisplayMode = .oneBesideSecondary
delegate = self delegate = self
} }