Check user settings for push notification in Swift

For iOS 10 or higher

Checking if push notifications have been enabled for your app has changed dramatically for Swift 3. Use this instead of the above examples if you are using Swift 3.

    let center = UNUserNotificationCenter.current()
    center.getNotificationSettings { (settings) in
        if(settings.authorizationStatus == .authorized)
        {
            print("Push authorized")
        }
        else
        {
            print("Push not authorized")
        }
    }

Here is Apple's documentation on how to further refine your check: https://developer.apple.com/reference/usernotifications/unnotificationsettings/1648391-authorizationstatus


Swift 4 version of salabaha's answer

extension UIApplication {
    class func openAppSettings() {
        UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, options: [:], completionHandler: {enabled in
            // ... handle if enabled
        })
}

This is the Swift 3 version where you can check whether notifications are enabled or disabled.

let notificationType = UIApplication.shared.currentUserNotificationSettings?.types
    if notificationType?.rawValue == 0 {
        print("Disabled")
    } else {
        print("Enabled")
    }

There is no way to change settings from the app. But you can lead user to application specific system settings using this code.

extension UIApplication {
    class func openAppSettings() {
        UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!)
    }
}

Updated for Swift 3.0

extension UIApplication {
    class func openAppSettings() {
        UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
    }
}

Updated for iOS 10+ & Swift 5+

extension UIApplication {
    @objc class func openAppSettings() {
        shared.open(URL(string: openSettingsURLString)!,
                    options: [:],
                    completionHandler: nil)
    }
}