Мне нужно создать список событий со строкой в качестве имени и список пар в качестве свойств, некоторые свойства событий являются статическими значениями, некоторые требуют динамического изменения, поэтому я создаю специальные функции внутри enum entry
для его обновления но выполнил ошибку unresolved reference
:
На самом деле, я хочу реализовать список перечислений со связанными значениями,
что-то вроде упомянутых статей:
Поскольку у меня более 100 событий, 95% из них являются статическими, только несколько из них необходимо обновить во время выполнения, поэтому запечатанный класс может не подходить для моей ситуации:
enum class Event(val eventName: String, vararg eventProperties: Pair<String, String?>) {
LOGIN_CLICKED("Login", ("View" to "button clicked")),
LOGIN_SUCCEED("Login", ("Type" to "succeed")),
LOGIN_ERROR("Login") {
fun errorMessage(errorMessage: String) {
eventProperties = listOf("ErrorType" to errorMessage)
}
},
// ... some other events
LIST_ITEM_CLICKED("LIST") {
fun listItemName(itemName: String) {
eventProperties = listOf("View" to itemName)
}
};
var eventProperties: List<Pair<String, String?>>? = listOf(*eventProperties)
// Although this approach can fix my problem, but I don't prefer it,
// because these functions are only meaningful to specific enum item,
// I don't want them be opened to all enum items.
//
// fun errorMessage(errorMessage: String) {
// eventProperties = listOf("ErrorType" to errorMessage)
// }
// fun listItemName(itemName: String) {
// eventProperties = listOf("View" to itemName)
// }
}
fun main(args: Array<String>) {
// unresolved reference
println(Event.LOGIN_ERROR.eventProperties)
Event.LOGIN_ERROR.errorMessage("error password")
println(Event.LOGIN_ERROR.eventProperties)
}