Как использовать быстрый класс с универсальным типом в цели 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

Другие вопросы по тегам