[英]How may I test the equivalency of enumeration cases with associated values in Swift 4
[英]How do you cases in swift enumeration that has default values for some cases and dynamic values for others?
讓我們以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的實際擴展名? 即訪問
fileType.rawValue應該導致jpeg
fileType2.rawValue應該產生png 。
您需要明確說明這些值是什么。
enum FileType: String {
case Header = "h"
case Image = "jpg"
case Swift = "swift"
}
這樣,您就可以確定枚舉是字符串類型。
編輯:我忘記了.Image情況。 我認為您不能擁有具有多個不同值的案例。 如果獲得FileType(rawValue:“ jpg”),則將獲得.Image,這是正確的。 但是,如果您具有.Image,Swift如何確定它是“ jpg”還是“ png”呢? 那是錯誤的方法。
相反,您可以擴展String,如下所示:
extension String {
var extensionIsImage: Bool {
return self == "jpg" || self == "png"
}
}
這樣,您就不會失去擴展的價值。
編輯2:請注意, extension String
表示Swift擴展名,而不是文件擴展名。
這應該使您更好地了解如何處理這種情況:
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")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.