2017-12-29 9 views
3

コトルのswitchの代替品はwhenです。だから、リサイクル・ビュー・アダプタ、私はビュータイプを返すいたとき、私はwhenを使用内側:コトリン/アンドロイド:返品は '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を使用する正しい方法は何ですか?上記の問題を解決するために何をすべきか?

+2

だけ入れリターン語際のキーワードとあなたはまだそのリターン –

+2

を試す前に、ヒント:マウスを問題のあるコードに置き、Alt-Enterキーを押します。 AS自体でそのような警告を修正することができるはずです – msrd0

+2

一般の利用するために、 'when'ブロック本体の' return'文を削除する必要があります@chandanicshekhat – voddan

答えて

8

。私は2つのステップでそのコードをリファクタリングすることをお勧めしたい。まず、Kotlinでwhenは式として使用することができ、それはreturns a value if you wish

override fun getItemViewType(position: Int): Int { 
    return when (position) { 
     0 -> ItemViewType.TITLE.type 
     1 -> ItemViewType.SUBTITLE.type 
     2 -> ItemViewType.ITEM.type 
     else -> -1 
    } 
} 

単一の文からなる第二に、関数本体は、変更することができますexpression bodyへ:

override fun getItemViewType(position: Int) = when (position) { 
    0 -> ItemViewType.TITLE.type 
    1 -> ItemViewType.SUBTITLE.type 
    2 -> ItemViewType.ITEM.type 
    else -> -1 
} 
+3

ヒント:警告の上にマウスを置いて、電球をクリックします。これは、これを処理する方法を示しています。警告にキャレットを置き、Alt + Enterを押すこともできます。 – Joshua

-1

kotlinでwhenを使用するため、このコードを試してみてください。

fun transform(color: String): Int { 
     return when (color) { 
      "Red" -> 0 
      "Green" -> 1 
      "Blue" -> 2 
      else -> throw IllegalArgumentException("Invalid color param value") 
     } 
    } 
1

あなた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 
    } 
} 
2

Kotlinでは、ifwhentry、を含むいくつかの文は、値を返すことができます。したがって、あなたのケースでは、文をリファクタリングしてwhenステートメントに実際の値を返し、それを関数から返すことができます。

だから、あなたは、次のようにあなたの方法を簡素化することができます:あなたは非常に慣用完全に罰金ではなく、単純な文としてswitchようwhenを使用している

override fun getItemViewType(position: Int): Int = when (position) { 
    0 -> ItemViewType.TITLE.type 
    1 -> ItemViewType.SUBTITLE.type 
    2 -> ItemViewType.ITEM.type 
    else -> -1 
} 
関連する問題