作为 Swift 的新手,这就是我发现的:
enum HttpMethod {
static let post = "POST"
static let get = "GET"
}
// can assign to string property.
request.httpMethod = HttpMethod.post // --> "POST"
Run Code Online (Sandbox Code Playgroud)
阅读本文后,使用无壳enum而不是无壳的原因对struct我来说很有意义,但这不是我在这里感兴趣的事情。
拥有强大的 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"
Run Code Online (Sandbox Code Playgroud)
第二个版本需要使用,rawValue但它将枚举视为真正的枚举。来自 C# 我习惯于使用.ToString()枚举值。
这一切只是归结为个人喜好和 Swift 使用无壳枚举而不是实际案例 + rawValue 的惯例,还是有另一个(技术)原因更喜欢第一个版本而不是第二个版本?
最好在以下场景中创建带有案例的枚举:
当在框架中定义了struct/class并且您想要扩展它以添加更多值时。
的,其中该方法被用于实施例是Notification.Name在Foundation
这一切都取决于你的意图
如果您事先知道这些值并且它们不会改变,那么创建一个 enum
如果这是不可能的,那就创造static价值。
如果您正在创建静态值,那么您就是在妥协,因此您不必在 an 中使用它enum,您可以将其定义为 astruct以便更清晰地表达意图。
到目前为止,有一个关于可扩展枚举的快速提案