2016-06-28 6 views
1

Ich versuche, die Beschreibung Ausgabe für ErrorProtocol zu ändern. Aber dieser Ausschnitt gibt mir eine Endlosschleife.Swift: get self.description in self.description

enum GeneralError: ErrorProtocol, CustomStringConvertible { 
     case NoMemory 

     var description: String { 
      return String(self).lowercased() 
     } 
} 

Wechsel zu self.dynamic Typ gibt mir ein "generalerror".

Gibt es einen Weg, wie man nur "Nomemory" bekommt? Ohne Bedingungen zu verwenden.

+0

Ich denke, dass Sie am Ende Bedingungen dafür benötigen. – keithbhunter

Antwort

4

Swift: Convert enum value to String? ist keine exakte Übereinstimmung für Ihre Frage, aber es deckt wirklich die Eingeweide davon ab. In Ihrem Fall sollten Sie es ändern, um ein wenig nach oben:

enum Error : String, ErrorProtocol, CustomStringConvertible { 
    case NoMemory 

    var description : String { 
     return self.rawValue.lowercaseString 
    } 
} 

Dies funktioniert, weil der Standard rawValue für Enum Fälle, in denen der zugehörigen Typ String der Name des Falles ist.

0

Wenn Sie String(self) in GeneralError.description nennen, du machst das String initializer Ihr Objekt verwenden (self) als CustomStringConvertible eine neue Zeichenfolge zu machen. Intern geschieht dies durch Aufruf von description darauf, daher die Rekursion

Was genau versuchen Sie zu erreichen?

+0

nur für Druckfehler Namen in besser lesbarer Form – pravdomil

+1

Das erklärt das "warum", aber ich fragte nach dem "was" – Alexander

Verwandte Themen