让我们举一个FileTypes枚举的例子
enum FileType {
case Header
case Image
case Swift
init? (rawValue : String ){
switch rawValue {
case "h":
self = .Header
case "png" , "jpeg", "jpg":
self = .Image
case "swift":
self = .Swift
default:
return nil
}
}
}
上述枚举适用于语句
let fileType = FileType(rawValue:"jpeg")
let fileType2 = FileType(rawValue:"png")
fileType和fileType2都将解析为.Image枚举情况。但是当我访问他们的rawValue时,它将包含" Image"。
我如何实现获得解决的实际扩展.Image首先?即访问
fileType.rawValue应该导致 jpeg
fileType2.rawValue应该导致 png 。
答案 0 :(得分:0)
您需要明确说明这些值是什么。
check(matches(isDisplayed()))
这样你就告诉enum是一个字符串类型。
编辑: 我忘记了.Image案例。我认为你不能有一个具有几个不同值的案例。如果你得到一个FileType(rawValue:“jpg”)那么你将获得.Image,这是正确的。但是,如果你有.Image,Swift如何确定它是“jpg”还是“png”?这是错误的做法。
相反,您可以扩展String,如下所示:
enum FileType: String {
case Header = "h"
case Image = "jpg"
case Swift = "swift"
}
这样你就不会失去扩展名的价值。
编辑2:请注意extension String {
var extensionIsImage: Bool {
return self == "jpg" || self == "png"
}
}
表示Swift扩展名,而不是文件扩展名。
答案 1 :(得分:0)
这可以让您更好地了解如何处理这种情况:
enum FileType {
case Header
case Imge(String)
case Swift
init? (fileExt : String ){
switch fileExt {
case "h":
self = .Header
case "png" , "jpeg", "jpg":
self = .Imge(fileExt)
case "swift":
self = .Swift
default:
return nil
}
}
}
var fileType = FileType(fileExt:"jpeg")!
var fileType2 = FileType(fileExt:"png")!
switch fileType2 {
case let .Imge(exten):
print("\(exten)", terminator:"")
default:
print("Error")
}