【发布时间】:2018-10-20 14:29:28
【问题描述】:
假设我有三个包含扩展的集合:
let photos: Set = ["jpg", "png", "tiff"]
let videos: Set = ["mp4", "mov", "mkv"]
let audios: Set = ["mp3", "wav", "wma"]
和一个简单的枚举为:
enum FileType {
case photo, video, audio, unknown
}
现在我要做的是实现一个函数,该函数根据传递给它的字符串和包含它的集合返回FileType 选项:
func getType(of file: String) -> FileType {
if photos.contains(file) { return .photo }
if videos.contains(file) { return .video }
if audios.contains(file) { return .audio }
return .unknown
}
它应该可以按预期工作,但我想知道是否有一种方法可以将 if 语句转换为 switch 情况(即使它会稍微改变逻辑),尤其是在使用枚举时 @987654328 @ 语句是避免错误的更好选择。
如果使用 switch 语句无法实现,我也将不胜感激任何优雅的替代方案。
【问题讨论】:
-
不是您具体问题的真正答案,但我会定义一个
FileExtension类型,该类型具有fileType属性和相应的文件类型,例如 gist.github.com/hamishknight/c211c63e321df33d18e9f90c72d4a20f -
@Hamish 我完全同意你的看法。此外,某些扩展名可以是“音频”和“视频”。
标签: swift if-statement enums switch-statement contains