swift – 有没有办法结合开关和包含?
发布时间:2020-12-14 05:31:36 所属栏目:百科 来源:网络整理
导读:假设我有三个包含扩展的集合: 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} 现在我想要做的是实现一个函数,
|
假设我有三个包含扩展的集合:
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语句(即使它会稍微改变为逻辑),尤其是在使用枚举时,switch语句是更好的选择避免错误. 如果使用switch语句无法实现,我也会感谢任何优雅的替代方案.
我认为你的整个问题是你试图为每种类型维护3个独立集合,而不是直接将它们连接到给定的文件类型:
enum FileType: String {
case photo,unknown
}
let extensions: [FileType: Set<String>] = [
.photo: ["jpg","tiff"],.video: ["mp4","mkv"],.audio: ["mp3","wma"]
]
func getType(of file: String) -> FileType {
return extensions.first { $0.value.contains(file) }?.key ?? .unknown
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
