Унаследовать класс 'CNLabeledValue' без указания конкретного типа - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь создать подкласс CNLabeledValue с помощью другого обобщенного c класса с именем CMLabeledValue, но не могу заставить его работать без указания конкретного типа вместо универсального c параметра.

Так наследуется вот так:

class CMLabeledValue<T>: CNLabeledValue<T> where T: NSCopying, T: NSSecureCoding {
}

Жалуется, что Inheritance from a generic Objective-C class 'CNLabeledValue' must bind type parameters of 'CNLabeledValue' to specific concrete types.. Итак, есть ли способ унаследовать CNLabeledValue без указания конкретного типа, например:

class CMLabeledValue: CNLabeledValue<CNPhoneNumber> {
}

Я хочу класс-оболочку над CNLabeledValue, который является обобщенным c, поэтому я не создаю класс-оболочку для CNPhoneNumber только. Я хочу общее решение. В Objective- c я могу просто сделать:

@interface CMLabeledValue : CNLabeledValue
@end

Есть ли способ в Swift достичь этого? в противном случае мне придется go сделать это в Objective- C. Спасибо!

1 Ответ

2 голосов
/ 29 марта 2020

Я недостаточно разбираюсь в Objective- C, чтобы сказать вам, почему вы не можете наследовать таким образом, но, поскольку вы создаете «обертку», вам, вероятно, следует использовать композицию здесь:

struct CMLabeledValue<T: NSCopying & NSSecureCoding> {
    let labeledValue: CNLabeledValue<T>
}

Дискуссия о предпочтении композиции перед наследованием

...