Enums 斯威夫特到科特林:枚举

Enums 斯威夫特到科特林:枚举,enums,kotlin,Enums,Kotlin,我们一直在进行这种转换,但每次尝试都只会产生错误。我可以提供我的尝试,但考虑到我做了多少不同的尝试,我认为看看是否有人能直接解决这一问题更有益 我曾考虑过使用“密封类”,但不完全确定这种情况是否有必要。我想学我能学的任何东西 Swift代码: enum Type: Equatable { case full case fixed(height: CGFloat) case scrollView(estHeight: CGFloat) case flex(prefHeight: CGFloat)

我们一直在进行这种转换,但每次尝试都只会产生错误。我可以提供我的尝试,但考虑到我做了多少不同的尝试,我认为看看是否有人能直接解决这一问题更有益

我曾考虑过使用“密封类”,但不完全确定这种情况是否有必要。我想学我能学的任何东西

Swift代码:

enum Type: Equatable {
case full
case fixed(height: CGFloat)
case scrollView(estHeight: CGFloat)
case flex(prefHeight: CGFloat)

var height: CGFloat {
    switch self {
    case .full: return UIScreen.main.bounds.height
    case .fixed(let height): return height
    case .scrollView(let estHeight): return estHeight
    case .flex(let pref): return pref
    }
}

static func == (lhs: Type, rhs: Type) -> Bool {
    switch (lhs, rhs) {
    case (.full, .full),
         (.fixed, .fixed),
         (.scrollView, .scrollView),
         (.flex, .flex):
        return true
    default:
        return false
    }
}
}
我所需要的只是一个如何实现这一点的可靠例子。不希望在Kotlin中提供全部内容;但如果值得做的话,那也没关系


谢谢

正如您所提到的,
密封类
可能是一个不错的选择

像这样:

sealed class Type

object Full : Type()
data class Fixed(val height: Double) : Type()
data class ScrollView(val estHeight: Double) : Type()
data class Flex(val prefHeight: Double) : Type()

fun Type.height(): Double = when (this) {
    is Full -> 1.0 // Screen.main.bounds.height
    is Fixed -> height
    is ScrollView -> estHeight
    is Flex -> prefHeight
}
注1:可以使用
而不是
密封类类型
接口类型
,但在这种情况下,编译器无法在
时检查
的完整性


注2:无需像示例中那样实现
等于<代码>对象
数据类
正确实现
等于

您至少应该提供您的Kotlin代码,以显示您所做/尝试的工作。在大多数情况下,我同意您的意见。这对我来说是个例外,因为我多次尝试使用错误的语法。我觉得让代码接受反馈比试图修正我的错误方法更有益。谢谢,这似乎满足了交叉点。他们真的是我的杀手。你的观点也正确。我想我不需要它,但还是把它留在了家里。这完全有道理,我很感激。