Swift 枚举嵌套 class VS Kotlin 密封 class。听不懂
Swift enum nested class VS Kotlin sealed class. Cant understand
我在 Swift 中有代码。
enum QuestionnaireViewMode {
case add(input: Add)
case edit(input: Edit)
enum Add {
case building(input: BuildingInput)
case car(input: CarInput)
case park
struct BuildingInput {
let address: String
let placeName: String
}
struct CarInput {
let name: String
}
}
enum Edit {
case profile(input: ProfileInput)
struct ProfileInput {
let name: String
}
}
}
这是枚举 class,非常易于使用,例如我可以像这样创建不同类型的对象:.add(input: .car(input: .init(name: "bmw")))
。但对我来说,kotlin 中的 enum classes 不清楚,我发现了一些类似的 - sealed class
并且我尝试转换为:
sealed class QuestionnaireViewMode {
sealed class add(input: Add)
sealed class edit(input: Edit)
sealed class Add {
sealed class building(input: BuildingInput)
sealed class car(input: CarInput)
sealed class park
data class BuildingInput(val address: String, val placeName: String)
data class CarInput(val name: String)
}
sealed class Edit {
sealed class profile(input: ProfileInput)
data class ProfileInput(val name: String)
}
}
这是正确的吗?
您的密封 类 需要扩展其父级。而且您使用 sealed class
而不是 fun
作为构建器函数,这没有意义。但是因为这些是 类 你不需要它,因为你可以直接调用构造函数。此外,由于您没有共同共享的状态,因此这些可以是密封接口而不是密封 类,这更简单一些,因为您不必担心构造函数。
以下是我的设计方式:
sealed interface QuestionnaireViewMode {
sealed interface Add: QuestionaireViewMode {
data class BuildingInput(val address: String, val placeName: String): Add
data class CarInput(val name: String): Add
}
sealed interface Edit: QuestionaireViewMode {
data class ProfileInput(val name: String): Edit
}
}
用法:
val myInput: QuestionaireViewMode =
QuestionaireViewMode.Add.CarInput(“bmw”)
我在 Swift 中有代码。
enum QuestionnaireViewMode {
case add(input: Add)
case edit(input: Edit)
enum Add {
case building(input: BuildingInput)
case car(input: CarInput)
case park
struct BuildingInput {
let address: String
let placeName: String
}
struct CarInput {
let name: String
}
}
enum Edit {
case profile(input: ProfileInput)
struct ProfileInput {
let name: String
}
}
}
这是枚举 class,非常易于使用,例如我可以像这样创建不同类型的对象:.add(input: .car(input: .init(name: "bmw")))
。但对我来说,kotlin 中的 enum classes 不清楚,我发现了一些类似的 - sealed class
并且我尝试转换为:
sealed class QuestionnaireViewMode {
sealed class add(input: Add)
sealed class edit(input: Edit)
sealed class Add {
sealed class building(input: BuildingInput)
sealed class car(input: CarInput)
sealed class park
data class BuildingInput(val address: String, val placeName: String)
data class CarInput(val name: String)
}
sealed class Edit {
sealed class profile(input: ProfileInput)
data class ProfileInput(val name: String)
}
}
这是正确的吗?
您的密封 类 需要扩展其父级。而且您使用 sealed class
而不是 fun
作为构建器函数,这没有意义。但是因为这些是 类 你不需要它,因为你可以直接调用构造函数。此外,由于您没有共同共享的状态,因此这些可以是密封接口而不是密封 类,这更简单一些,因为您不必担心构造函数。
以下是我的设计方式:
sealed interface QuestionnaireViewMode {
sealed interface Add: QuestionaireViewMode {
data class BuildingInput(val address: String, val placeName: String): Add
data class CarInput(val name: String): Add
}
sealed interface Edit: QuestionaireViewMode {
data class ProfileInput(val name: String): Edit
}
}
用法:
val myInput: QuestionaireViewMode =
QuestionaireViewMode.Add.CarInput(“bmw”)