1

我想子类UNNotificationCategory化(UserNotifications),因为我想使用枚举而不是硬编码字符串作为类别标识符。UNNotificationCategory定义中有一个方便的 init

public convenience init(identifier: String, actions: [UNNotificationAction], intentIdentifiers: [String], options: UNNotificationCategoryOptions = [])

我无法为我的子类编写初始化程序。我知道我不能在子类中指定初始化程序,因为我想调用超类的便利 init。但是我的便利初始化也引发了编译器错误。

这是代码:

enum PushNotificationCategoryIdentifier:String {
}    

convenience init(categoryIdentifier:PushNotificationCategoryIdentifier, actions:[UNNotificationAction], intentIdentifiers:[String], options: UNNotificationCategoryOptions) {
            self.init(identifier: categoryIdentifier.rawValue, actions: actions, intentIdentifiers: intentIdentifiers, options: options)
        }

这会导致错误:在从初始化程序返回之前,未在所有路径上调用 self.init

我猜这是因为这个类是在 Objective-C 中实现的,并且可能他们没有从便利初始化器中调用指定的初始化器(因为 Objective-C 类不必从便利初始化器中调用指定的初始化器)。

但这是否意味着UNNotificationCategory如果我想在其中编写初始化程序,我就不能子类化?

4

1 回答 1

0

不,你可以这样做。您必须为此定义init()方法。现在你只定义了convenience init(). 但是你必须init()在你的子类中定义。当您编写 aconvenience init()时,它只是以一种简单的方式帮助初始化,但您仍然必须init()使用convenience init(). 您可以在Apple 官方文档中阅读

于 2016-12-21T16:08:08.900 回答