返回
Swift 5 中 Switch 语句和枚举冻结
IOS
2023-10-19 13:25:02
如今,Swift 5 已问世,相信很多开发者已经升级了自己的 Xcode 工程,以便在最新的 Swift 版本中进行开发。通常情况下,升级 Swift 5 会非常顺利,不会遇到什么大问题。不过,在使用 switch 语句枚举未知值时,可能会遇到很多警告。
到底是什么问题呢?现在让我们通过一小段代码来展示,该代码用于为不同大小的类适配布局。它枚举出了 UIUserInterfaceSizeClass
的所有可能值,然后根据不同的值返回不同的布局。
func layoutForSizeClass(_ sizeClass: UIUserInterfaceSizeClass) -> UIView {
switch sizeClass {
case .compact:
return CompactLayout()
case .regular:
return RegularLayout()
}
}
这段代码在 Swift 5 中会产生以下警告:
“枚举值 ‘.unspecified’ 没有在 switch 语句中处理。添加一个默认分支或处理该值。”
要解决这个警告,有两种方法。
- 添加一个默认分支。
在 switch
语句的末尾添加一个 default
分支,并返回一个默认布局。这将确保在枚举了所有可能的值之后,switch
语句不会遗漏任何值。
func layoutForSizeClass(_ sizeClass: UIUserInterfaceSizeClass) -> UIView {
switch sizeClass {
case .compact:
return CompactLayout()
case .regular:
return RegularLayout()
default:
return DefaultLayout()
}
}
- 使用
@unknown
标记枚举。
Swift 5 中的新特性之一是 @unknown
关键字。它可以用来标记枚举,以指示编译器在编译时不知道枚举的所有可能值。这样,编译器就不会发出警告。
@unknown
enum UIUserInterfaceSizeClass {
case compact
case regular
}
func layoutForSizeClass(_ sizeClass: UIUserInterfaceSizeClass) -> UIView {
switch sizeClass {
case .compact:
return CompactLayout()
case .regular:
return RegularLayout()
}
}
值得注意的是,@unknown
关键字只是一种临时解决方案。在将来,你应该始终知道枚举的所有可能值,并相应地处理它们。
建议
在开发过程中,尽量避免使用枚举冻结。如果必须使用枚举冻结,请确保你了解它的含义和影响。在可能的情况下,请使用 @unknown
关键字来标记枚举。
枚举冻结是一个相对新的特性,它可能会在未来的 Swift 版本中发生变化。因此,请务必关注 Apple 的文档,以了解有关枚举冻结的最新信息。