2016-11-15 2 views
1
protocol PushNotification { 
    func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) 
} 

extension PushNotification where Self:AppDelegate { 
func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) { 
     print("Register for Push Notifications Successful") 
    } 
} 

Я пытаюсь получить мое приложение делегата вместо вызова его собственныйРасширение протокола переопределение Встроенная функция член класса

func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) 

Вызов расширение, но не похоже на работу? Возможно ли это? в быстрых 2,3? или быстро 3?

Ожидаемые Поведения

Так что, когда я пишу

let notificationSettings = UIUserNotificationSettings(
      forTypes: [.Badge, .Sound, .Alert], categories: nil) 
     application.registerUserNotificationSettings(notificationSettings) 
     application.registerForRemoteNotifications() 

Он должен вызывать

func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) 

который принадлежит к приложению делегата, который я обычно должны переопределить в приложение делегата.

Я ожидаю, что вместо этого вызовите расширение протокола. Вот делегат приложения

class AppDelegate: UIResponder, UIApplicationDelegate, AWSDKDelegate, PushNotification { 
// Could this function be called from my protocol extension instead? 
// Rather than me overriding this function ? 
    // func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) { 
//  print("Register for Push Notifications Successful") 
// } 
} 
+0

Не могли бы вы уточнить, что происходит, и что вы хотите? – Alexander

+0

Так что, когда я называю Пусть notificationSettings = UIUserNotificationSettings ( forTypes: [.Badge, .Sound, .Alert], категории: ноль) application.registerUserNotificationSettings (notificationSettings) application.registerForRemoteNotifications() он должен вызвать func application (application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings), который принадлежит делегату приложения, который я обычно должен переопределять в делегате приложения. , но расширение моего протокола не вызывается. –

+1

Ожидается, что что-то поймут из этого? – Alexander

ответ

0

Расширения протоколов предоставляют стандартные методы реализации по умолчанию. Любой соответствующий тип, который реализует этот метод, также переопределяет реализацию расширения.

+0

Да, я понимаю, что это будет охватывать случай выше? где я хочу, чтобы делегат приложения выбирал реализацию расширения протокола? –

+0

'AppDelegate' ничего не выбирает. Если 'AppDelegate' реализует этот метод, он переопределит реализацию по умолчанию, и это то, что будет вызываться. Если вы хотите использовать реализацию по умолчанию, то не реализуйте переопределение метода в вашем 'AppDelegate' – Alexander

+0

Могу ли я получить расширение протокола для переопределения этой функции? –

Смежные вопросы