In Swift you can write something like:
protocol Constants {
associatedtype StringProperties
}
struct ViewState {
let viewName: String
}
extension ViewState: Constants {
enum StringProperties: String {
case text = "some view text"
}
}
struct LayerState {
let layerName: String
}
extension LayerState: Constants {
enum StringProperties: String {
case text = "some layer text"
}
}
let viewState = ViewState(viewName: "Some view name")
let viewValue = ViewState.StringProperties.text.rawValue // "some view text"
let layerState = LayerState(layerName: "Some layer name")
let layerValue = LayerState.StringProperties.text.rawValue // "some layer text"
In this way if a struct or class conforms to protocol Constants
it has to implement something pertaining to StringConstants
Is there something like this in Kotlin
which forces this kind of conformance from an interface?
It would be ideal to do something like:
interface Constants {
enum class StringProperties
}
data class ViewState(val viewName: String): Constants {
enum class StringProperties(val string: String) {
Text("some view text")
}
}
data class LayerState(val layerName: String): Constants {
enum class StringProperties(val string: String) {
Text("some layer text")
}
}
val viewState = ViewState("some view name")
val viewText = ViewState.StringProperties.Text.string // "some view text"
val layerState = LayerState("some layer name")
val layerText = LayerState.StringProperties.Text.string // "some layer text"