Enums 斯威夫特到科特林:枚举
我们一直在进行这种转换,但每次尝试都只会产生错误。我可以提供我的尝试,但考虑到我做了多少不同的尝试,我认为看看是否有人能直接解决这一问题更有益 我曾考虑过使用“密封类”,但不完全确定这种情况是否有必要。我想学我能学的任何东西 Swift代码:Enums 斯威夫特到科特林:枚举,enums,kotlin,Enums,Kotlin,我们一直在进行这种转换,但每次尝试都只会产生错误。我可以提供我的尝试,但考虑到我做了多少不同的尝试,我认为看看是否有人能直接解决这一问题更有益 我曾考虑过使用“密封类”,但不完全确定这种情况是否有必要。我想学我能学的任何东西 Swift代码: enum Type: Equatable { case full case fixed(height: CGFloat) case scrollView(estHeight: CGFloat) case flex(prefHeight: CGFloat)
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代码,以显示您所做/尝试的工作。在大多数情况下,我同意您的意见。这对我来说是个例外,因为我多次尝试使用错误的语法。我觉得让代码接受反馈比试图修正我的错误方法更有益。谢谢,这似乎满足了交叉点。他们真的是我的杀手。你的观点也正确。我想我不需要它,但还是把它留在了家里。这完全有道理,我很感激。