2016-03-24 18 views
0

Ich habe eine Aufzählung wie folgt definiert:Swift 2: @objc Protokoll und ENUM Array

@objc enum MyEnum: Int { 
    case Case1, Case2 
} 

und das folgende Protokoll:

@objc protocol MyProtocol { 
    func myFunc(myData: [MyEnum]) 
} 

jetzt das Protokoll die folgenden Fehler führt:

Method cannot be a member of a @objc protocol because the type of the parameter cannot be represented in Objective-C 

Ich verstehe nicht, warum das passiert. Warum das funktioniert:

func MyFunc(myData: MyEnum) 

aber wirft Fehler mit dem Array?

Ich dachte daran, ein Array von Int übergeben und dann wieder in Enum konvertieren, aber ich mag es nicht sehr. Gibt es eine bessere Lösung?

Antwort

0

Ich bin mir nicht sicher, aber es sollte nicht funktionieren, da ein Objective-C-Array nur Zeiger enthalten sollte, und eine Enum von Int enthält keine Zeiger.

Sie können so etwas wie dieses

@objc enum MyEnum: Int { 
    case Case1, Case2 

    var numberValue : NSNumber { 

     get { 

      return NSNumber(
       integer: self.rawValue 
      ) 
     } 
    } 
} 

@objc protocol MyProtocol { 
    func myFunc(myData: [NSNumber]) 
} 
+0

versuchen Ja, du hast recht ich hätte nicht gedacht, dass NSArray nur Zeiger enthalten. Was die Auflösung angeht, habe ich die for-Schleife außerhalb der Funktion verschoben, anstatt die Transformation außerhalb der Funktion und dann wieder innerhalb der Funktion durchzuführen – whtman

Verwandte Themen