George B
George B

Reputation: 2712

Type of expression is ambiguous without more context in Swift 3

I am trying to learn Swift and am going through a tutorial on push notifications.

let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge , .Sound], categories: nil)

Is giving me the error

"Type of expression is ambiguous without more context".

I copy/pasted this line directly from a tutorial and have found this same line used on StackOverFlow.

What am I doing wrong?
I am using Xcode 8.

Upvotes: 3

Views: 6521

Answers (2)

Nirav D
Nirav D

Reputation: 72410

UIUserNotificationSettings is deprecated with UNNotificationSettings in iOS 10, if you want to implement UNNotificationSettings then implement like below.

First you need to import UserNotifications for that.

let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge , .sound]) {
     (granted, error) in

}

For more details on this check this tutorial by Michał Kałużny on UserNotifications.framework

Upvotes: 1

rmaddy
rmaddy

Reputation: 318794

Look at the documentation for UIUserNotificationSettings. Its signature has changed in Swift 3 as has the values for the types.

You need:

let settings = UIUserNotificationSettings(types: [.alert, .badge , .sound], categories: nil)

Of course if you are only supporting iOS 10 and later, then you shouldn't use UIUserNotificationSettings at all since it is now deprecated. Use UNNotificationSettings instead. But if you are still supporting iOS 9 or earlier, then using UIUserNotificationSettings is fine as long as you change to the updated syntax.

Upvotes: 11

Related Questions