1

UNNotificationCategoryカテゴリ識別子としてハードコードされた文字列の代わりに列挙型を使用したいので、(UserNotifications)をサブクラス化します。UNNotificationCategory定義内に便利な init が 1 つあります。

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()ただし、サブクラスで定義する必要があります。を記述するconvenience init()と、簡単な方法で初期化を支援するためだけに存在しますinit()が、convenience init(). Apple公式ドキュメントで読むことができます

于 2016-12-21T16:08:08.900 に答える