2017-04-03 5 views
0

Ich habe eine Antwort enum für meinen Netzwerk-Rückgabewert und eine Funktion, die eine AnyObject zurückgeben sollte, weil es wird ein Wert eines Schlüssels sein muss.Probleme mit zugeordneten Werten von enums

enum Response { 

    case Success(value:AnyObject) 
    case Failure(errorNumber: Int) 

    func getResponse() -> AnyObject{ 
     switch self { 
     case .Success(value: AnyObject): 
      return value 
     case .Failure(errorNumber: Int): 
      return errorNumber 
     } 
    } 

} 

die unten angegebenen Fehler generieren: enter image description here Ich habe nicht den eigentlichen Text für die Fehler hinzufügen, weil ich Ihnen zeigen wollte, dass es noch nicht Syntax für errornumber Hervorhebung macht und Wert

Schließlich in meinem Code würde ich diesen Wert zu einem AnyObject zuweisen müssen, die später, dass ANYOBJECT wird [NSObject : AnyObject]

downcasted werden So hätte ich:

Das erste Code-Snippet ist mein neuer Code, aber die internen Frameworks sind Codezeilen, die ich nicht ändern kann.

FYI Unser Code ist immer noch mit Swift2 :(

+4

Ihre Syntax ist falsch, sollte es sein 'Fall .Success (let-Wert) : ' –

+4

Beseitigen Sie die' getResponse() '-Funktion Behandeln Sie die Enum für was es ist, einen Datenwert oder einen Fehler.Recombining diese zurück in einen einzigen Rückgabewert vom Typ Any/AnyObject wirft Informationen und verursacht später Typecasting Hölle. –

+2

Nur weil du 'AnyObject' später benutzt, bedeutet das nicht, dass' Response' darauf eingeht - ich würde es empfehlen B. "Response " mit einem 'Case Success (Wert: T)' (und wie Price sagt, sollten Sie die Fälle nicht miteinander kombinieren - was ist, wenn ein 'Int' ein gültiger Erfolgswert ist?). – Hamish

Antwort

1

Ich würde vorschlagen, Sie geben die Swift Book ein Lese:

func getResponse() -> Any { 
    switch self { 
    case .Success(let value): 
     return value 
    case .Failure(let errorNumber): 
     return errorNumber 
    } 
} 
+0

Danke, ich habe das Buch und andere Sachen schon * gelesen *. Es sind diese Probleme, die auftreten, wenn Sie sie anwenden: D. Ich benutze Swift2, bedeutet das nicht, dass 'Any' außerhalb des Geltungsbereiches liegt. – Honey

+1

@Honey Wenn Sie immer noch Swift 2 verwenden, sollten Sie 'AnyObject' verwenden, andernfalls' Any' –