作为 Swift 新手,我发现:
enum HttpMethod {
static let post = "POST"
static let get = "GET"
}
// can assign to string property.
request.httpMethod = HttpMethod.post // --> "POST"
使用无壳的原因enum
而不是一个struct
读后对我来说很有意义this https://stackoverflow.com/questions/38585344/swift-constants-struct-or-enum/39005493#39005493但这不是我感兴趣的事情。
拥有强大的 C# 背景,这就是我实现它的方式:
enum HttpMethod: String {
case post = "POST"
case get = "GET"
}
// I'd even consider this alternatively:
enum HttpMethod: String {
case post
case get
}
// Must retrieve string value
request.httpMethod = HttpMethod.post.rawValue // --> "POST" or "post"
第二个版本需要使用rawValue
但它将枚举视为real枚举。来自 C# 我习惯使用.ToString()
关于枚举值。
这一切是否只是取决于个人喜好和 Swift 的约定,即使用无大小写枚举而不是实际大小写 + rawValue,或者是否还有其他(技术)原因更喜欢第一个版本而不是第二个版本?
带案例的枚举
在以下场景中,最好创建一个包含案例的枚举:
- 这是互斥的
- 您在编译时已知的有限值集
- 您是定义它的人(如果在框架中定义了枚举,您将无法扩展它以添加更多情况)
枚举的优点是:
- 由于值是有限集,因此您可以编写详尽的 switch 语句
- 更干净的代码
静态值:
When a struct
/ class
是在框架中定义的,并且您想要扩展它以添加更多值。
使用此方法的示例是Notification.Name
in Foundation
Note:
- Swift 中的枚举非常强大
- 枚举可以有关联的值
- 枚举可以有其他功能。 (如果您正在定义像开始、进行中、完成这样的状态,您可以定义一个名为 next 的函数,它可以返回下一个状态。start.next()
- 如果您处于值不互斥的情况(例如可以是值的组合),则使用 OptionSet
结论
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)