Как использовать быстрый класс с универсальным типом в цели c
У меня есть следующий быстрый класс с NumericType T.
@objc class MathStatistics<T: NumericType> : NSObject {
var numbers = [T]()
func sum() -> T? {
if numbers.count == 0 {
return nil
}
var sum = T(0)
for value in numbers {
sum = sum + value
}
return sum
}
}
В swift a инициализируйте объект класса следующим образом:
let statistics = MathStatistics<Double>()
Как мне инициализировать тот же объект в Objective C? Следующая строка не устанавливает числовой тип T.
MathStatistics *stats = [[MathStatistics alloc] init];
1 ответ
Решение
Ты не можешь Как указано в документации:
У вас будет доступ ко всему внутри класса или протокола, помеченному атрибутом @objc, если оно совместимо с Objective-C. Это исключает функции Swift-only, такие как перечисленные здесь:
- Дженерики
- Кортеж
- Перечисления, определенные в Swift
- Структуры, определенные в Swift
- Функции верхнего уровня, определенные в Swift
- Глобальные переменные, определенные в Swift
- Typealiases определены в Swift
- Свифт в стиле вариа
- Вложенные типы
- Функции карри
Вы должны избавиться от дженериков в своем классе. Тогда вы можете использовать его в Objective-C