Альтернатива switch
в Котлин – это when
. Таким образом, внутри адаптера просмотра recycler, когда я возвращаю тип вида, я использую, when
:
override fun getItemViewType(position: Int): Int { when (position) { 0 -> return ItemViewType.TITLE.type 1 -> return ItemViewType.SUBTITLE.type 2 -> return ItemViewType.ITEM.type else -> return -1 } }
Но вышеприведенное заявление отправляет наше предупреждающее сообщение « Return can be lifted out of 'when'
.
Кто-нибудь знает, какой может быть правильный способ использования, when
? И что нужно сделать, чтобы исправить вышеупомянутый случай?
Вы используете, when
похожий switch
как простой оператор, который полностью прекрасен, но не очень идиоматичен. Я бы рекомендовал реорганизовать этот код в два этапа: во-первых, when
в Kotlin можно использовать выражение, оно возвращает значение, если вы хотите :
override fun getItemViewType(position: Int): Int { return when (position) { 0 -> ItemViewType.TITLE.type 1 -> ItemViewType.SUBTITLE.type 2 -> ItemViewType.ITEM.type else -> -1 } }
Во-вторых, тело функции, состоящее из одного оператора, может быть изменено на тело выражения :
override fun getItemViewType(position: Int) = when (position) { 0 -> ItemViewType.TITLE.type 1 -> ItemViewType.SUBTITLE.type 2 -> ItemViewType.ITEM.type else -> -1 }
В Kotlin несколько операторов, включая if
, when
и try
, могут возвращать значение. Таким образом, в вашем случае вы можете реорганизовать оператор, чтобы оператор when
возвращал фактическое значение, которое затем можно вернуть из функции.
Таким образом, вы можете упростить свой метод следующим образом:
override fun getItemViewType(position: Int): Int = when (position) { 0 -> ItemViewType.TITLE.type 1 -> ItemViewType.SUBTITLE.type 2 -> ItemViewType.ITEM.type else -> -1 }
Твое, when
правильно, однако у Котлина есть возможность снять возврат из «когда», если ты возвращаешься в каждом случае, таким образом, он становится:
override fun getItemViewType(position: Int): Int { return when (position) { 0 -> ItemViewType.TITLE.type 1 -> ItemViewType.SUBTITLE.type 2 -> ItemViewType.ITEM.type else -> -1 } }
попробуйте этот код для использования, when
в kotlin:
fun transform(color: String): Int { return when (color) { "Red" -> 0 "Green" -> 1 "Blue" -> 2 else -> throw IllegalArgumentException("Invalid color param value") } }