Kotlin中等同于Swift字符串枚举(一组已定义的字符串常量)的方法是什么?

14

我有以下的Swift枚举:

enum ScreenName: String {
    case start = "Start Screen"
    case dashboard = "My Dashboard Screen"
}

这使我能够拥有一个类型化的常量集合,并像这样使用它们:

func trackView(screen: ScreenName) {
     print("viewed \(screen.rawValue)")
}

trackView(screen: .start) // -> "viewed Start Screen"

在 Kotlin 中,这个会是什么等效物?

2个回答

27

类似于:

enum class ScreenName(val displayName : String) { 
  START("Start Screen"), 
  DASHBOARD("My Dashboard Screen") 
}

fun trackView(screenName : ScreenName) {
  print("viewed ${screenName.displayName}")
}

6

我现在发现另一种可能性,可以使用封闭类:

sealed class ScreenName(val name : String) {
    object Start :     ScreenName("Start Screen")
    object Dashboard : ScreenName("My Dashboard Screen")

    data class NewsDetail(val title: String) : ScreenName("News")

    val displayName: String
        get() = when(this) {
            is NewsDetail -> "${name} - ${title}"
            else -> name
        }
}

这样做的好处在于它可以模仿具有关联值的Swift枚举。

2
打字枚举不是带有关联值的枚举,它们是不同的概念。 OP 中的 Swift 示例使用枚举,其中值 字符串,而带有关联字符串值的枚举仍然是 int,就像每个正常的枚举一样,它具有与之相关联的字符串值。 - Kevin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接