2015-07-11 5 views
7

Ho la seguente classe di rapida con un T. NumericTypeCome utilizzare una classe veloce con un tipo generico in 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 
     } 
    } 

In rapida un inizializzare l'oggetto classe come segue:

let statistics = MathStatistics<Double>() 

Come inizializzare lo stesso oggetto nell'obiettivo C? La seguente riga non imposta il tipo numerico T.

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

risposta

8

Non è possibile. Come elencato nella documentation:

Avrai accesso a qualsiasi cosa all'interno di una classe o un protocollo che è contrassegnati con l'attributo @objc purché compatibile con Objective-C. Ciò esclude Swift-solo le caratteristiche come quelli elencati qui:

  • Generics
  • tuple
  • enumerazioni definite a Swift
  • strutture definite a Swift
  • funzioni di primo livello definiti Swift
  • Variabili globali definite in Swift
  • Le tipealie definite in Swift
  • Swift stile variadics
  • tipi nidificati
  • funzioni curry

Dovreste sbarazzarsi dei generici nella classe. Quindi è possibile utilizzarlo in Objective-C

+1

Grazie. Dovrei leggere il documento Apple più frequentemente;) – Morpheus78

Problemi correlati