我有許多Java類需要轉換爲Swift代碼。 類中的一個具有先進的枚舉:Swift中的高級Java枚舉
public enum Student {
STUDENT_ONE("Steve", "Jobs")
STUDENT_TWO("Tim", "Cook")
private String _firstName;
private String _lastName;
}
我怎麼能複製斯威夫特同樣的行爲?
我有許多Java類需要轉換爲Swift代碼。 類中的一個具有先進的枚舉:Swift中的高級Java枚舉
public enum Student {
STUDENT_ONE("Steve", "Jobs")
STUDENT_TWO("Tim", "Cook")
private String _firstName;
private String _lastName;
}
我怎麼能複製斯威夫特同樣的行爲?
我試圖做同樣的事情與Java代碼轉換爲雨燕,並最終做這樣的事情:
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"
}
}
}
}
現在,這是很長而雜亂,我真的不知道是否這是做到這一點的正確方法,但我找不到任何可行的方法。我很想知道是否有其他更好的方法來做到這一點。
這是我落得這樣做 - 不知道這在所有:
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")
}
這絕對比我的回答更好(或者說我應該說的更少)。 – aksh1t
仍然不確定這個解決方案。我希望在接受這個答案之前看到其他一些建議。 – YogevSitton
確實。同樣在這裏。 – aksh1t
經過一番思考,我同意godmoney認爲aksh1t的解決方案是更好的,我的解決方案使用的字符串。
無論如何,這裏是aksh1t的溶液的更簡潔的變型中,僅使用一個計算屬性返回的元組:(在夫特2.0測試)
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
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")
}
您甚至可以省略init方法並使用默認構造函數。 –
我說我正在處理它的方式。不知道這兩個解決方案中哪一個我更喜歡.... – YogevSitton
這太複雜了,太冗長了。 – Laurent