2016-12-30 81 views
-1

我怎样才能迅速建立枚举从自定义类,像这样我怎样才能在斯威夫特

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 
    } 
} 

例如枚举

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

创建自定义类枚举,但我有一个错误not conform to RawRepresentablenot convert to Literal

+1

的原始类型枚举的不能是任意类,请参见http://计算器.com/questions/41316815/enum-rawvalue-as-anyclass用于解答类似问题。 –

+0

想一想:'MyType。 Test1 == MyType。 Test1'? –

+0

这不是枚举的工作方式。但是,您可以使用'static let'而不是'case'来定义它们,并且您可以像这样访问它们'MyType.Test1' – EmilioPelaez

回答

0

我的解决方案1在网络上找到

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) 
    } 
} 

和我的溶液2从脑海(解决方法),这不会从类/结构初始化但其具有我的数据

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) } } 

}