2015-07-11 2 views
7

У меня есть следующий быстрый класс с NumericType Т.Как использовать быстрый класс с универсального типа в Objective C

@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 
     } 
    } 

В Свифт инициализировать объект класса следующим образом:

let statistics = MathStatistics<Double>() 

Как инициализировать тот же объект в Objective C? Следующая строка не устанавливает числовой тип T.

MathStatistics *stats = [[MathStatistics alloc] init]; 

ответ

8

Вы не можете. Как указано в documentation:

Вы будете иметь доступ к чему-либо внутри класса или протокол, что это помеченную @objc атрибутом тех пор, пока он совместим с Objective-C. Это исключает Swift только такие функции, как те, которые перечислены здесь:

  • Generics
  • кортежей
  • Перечисления, определенные в Swift
  • структуры, определенные в Swift
  • функции верхнего уровня определены в Swift
  • Глобальные переменные, определенные в Swift
  • Тип, определенные в Swift
  • Swift стиле variadics
  • Вложенные типы
  • функции
  • карри

Вы должны были бы избавиться от дженериков в своем классе. Затем вы можете использовать его в Objective-C

+1

Спасибо. Я должен чаще читать яблочный док;) – Morpheus78

Смежные вопросы