2016-12-30 2 views
-1

Wie kann ich Enum in swift von benutzerdefinierten Klasse erstellen, wie dieseWie kann ich Enum von benutzerdefinierten Klasse in Swift erstellen

class MyClass: NSObject { 
    var identifier: String 
    var title: String 
    var iconName: String 

    init(identifier: String, title: String, iconName: String) { 
     super.init() 
     self.identifier = identifier; 
     self.title = title 
     self.iconName = iconName 
    } 
} 

Beispiel Enum

enum MyType: MyClass { 
     case Test1 = (identifier: "t1", title: "Test 1", iconName: "icn1") 
     case Test2 = (identifier: "t2", title: "Test 2", iconName: "icn2") 
} 

Aber ich habe einen Fehler not conform to RawRepresentable und not convert to Literal

+1

Die rohe Art eines ENUM keine willkürliche Klasse sein kann, finden Sie unter http: // Stackoverflow .com/questions/41316815/enum-rawvalue-as-anyclass für eine ähnliche Frage mit Antwort. –

+0

Denken Sie an: 'MyType. Test1 == MyType. Test1'? –

+0

So funktioniert Enum nicht. Sie können sie jedoch mit 'static let' anstelle von' case' definieren und so auf 'MyType.Test1' zugreifen – EmilioPelaez

Antwort

0

meine Lösung 1 Befund auf Netzwerk

enum Devices: CGSize { 
    case iPhone3GS = "{320, 480}" 
    case iPhone5 = "{320, 568}" 
    case iPhone6 = "{375, 667}" 
    case iPhone6Plus = "{414, 736}" 
} 

extension CGSize: StringLiteralConvertible { 
    public init(stringLiteral value: String) { 
    let size = CGSizeFromString(value) 
    self.init(width: size.width, height: size.height) 
    } 

    public init(extendedGraphemeClusterLiteral value: String) { 
    let size = CGSizeFromString(value) 
    self.init(width: size.width, height: size.height) 
    } 

    public init(unicodeScalarLiteral value: String) { 
    let size = CGSizeFromString(value) 
    self.init(width: size.width, height: size.height) 
    } 
} 

und meine Lösung 2 aus meinem Kopf (Umgehung), init dies nicht von Klasse/Struktur aber die hat meine Daten

typealias MyTypeData = (title: String, iconName: String) 
enum MyType: String { 
    case Test1 
    case Test2 

    private var data: MyTypeData { 
     switch self { 
     case .Test1: return (title: "One", iconName: "icn1") 
     case .Test2: return (title: "Two", iconName: "icn2") 
     } 
    } 

    var title: String { get { return data.title } } 
    var icon: UIImage? { get { return UIImage(named: data.iconName) } } 

} 
Verwandte Themen