Swift中的高级Java枚举

我有一些我需要转换为Swift代码的Java类。 其中一个类有一个先进的枚举:

public enum Student { STUDENT_ONE("Steve", "Jobs") STUDENT_TWO("Tim", "Cook") private String _firstName; private String _lastName; } 

我怎样才能在Swift中复制相同的行为?

我试图把Java代码转换成Swift来做同样的事情,最后做了这样的事情:

 public enum Student { case STUDENT_ONE case STUDENT_TWO var firstName: String { get { switch self { case .STUDENT_ONE: return "Steve" case .STUDENT_TWO: return "Tim" } } } var lastName: String { get { switch self { case .STUDENT_ONE: return "Jobs" case .STUDENT_TWO: return "Cook" } } } } 

现在,这是非常漫长和混乱的,我不确定这是否是正确的方法,但我找不到任何其他工作。 我很想知道是否有其他更好的方法来做到这一点。

经过一番思考,我同意godmoney aksh1t的解决scheme更好,我的解决scheme使用string。

无论如何,下面是一个更简洁的aksh1t解决scheme的变体,只使用一个计算属性返回一个元组:(在Swift 2.0中testing)

 enum Student { case STUDENT_ONE, STUDENT_TWO typealias Details = (firstName: String, lastName: String) var details : Details { switch(self) { case STUDENT_ONE : return ("Steve", "Jobs") case STUDENT_TWO : return ("Tim", "Cook") } } } // Usage: func test(sd: Student.Details) { print(sd.firstName) print(sd.lastName) } test(Student.STUDENT_ONE.details) 

这就是我最终做的 – 不确定这一点:

 struct Students { enum Students { case STUDENT_ONE(String, String) case STUDENT_TWO(String, String) } let STUDENT_ONE = Students.STUDENT_ONE("Steve", "Jobs") let STUDENT_TWO = Students.STUDENT_TWO("Steve", "Two") } 

枚举不一定是表示这种types数据的最佳select。 我select了struct s,并且使用正确的访问器可以很好地工作:

 public struct Student { public let firstName : String public let lastName : String public static let STUDENT_ONE = Student(firstName: "Steve", lastName: "Jobs") public static let STUDENT_TWO = Student(firstName: "Tim", lastName: "Cook") }