UNNotificationCategory子类init问题

时间:2016-12-21 15:44:05

标签: ios swift apple-push-notifications usernotifications convenience-methods

我想继承UNNotificationCategory(UserNotifications),因为我想使用枚举而不是硬编码字符串作为类别标识符。 UNNotificationCategory定义

中有一个便利初始化
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中实现的,可能是他们没有从easy initailizer调用指定的initailizer(因为Objective-C类不必从easy initailizer调用指定的初始化器)。

但这是否意味着如果我想在其中编写初始化程序,我就无法继承UNNotificationCategory

1 个答案:

答案 0 :(得分:0)

不,你能做到这一点。您必须为此定义init()方法。现在你只定义了convenience init()。但是您必须在子类中定义init()。 当您编写convenience init()时,它只是以简单的方式帮助初始化,但您仍然必须使用init()中的语法convenience init()来调用指定的init。 您可以在http://camel.apache.org/using-propertyplaceholder.html

上阅读