Kotlin switch-statement con más de dos variables?

Digamos que establezco getCount () = 3, ¿cómo puedo especificar qué fragment y título de página recuperar para el tercer elemento?

class ViewPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) { override fun getCount() = 3 override fun getItem(i: Int) = if (i == 0) KotlinListFragment() else if (i == 1) JavaListFragment() else (i == 2) AndroidFragment() override fun getPageTitle(i: Int) = if (i == 0) "Kotlin" else (i == 1) "Java" else (i == 2) "Android" 

Usa la expresión when :

 when (getCount()) { 0 -> return "a" 1 -> return "b" 2 -> return "c" else -> return "" } 

o

 return when (getCount()) { 0 -> "a" // etc else -> "" } 

o

 when (getCount()) { 0 -> { // do something here } // etc. else -> {} } 

Sé que esto no es lo que realmente estabas preguntando, pero en realidad podría ser más fácil tener una Lista de pares y hacer una recuperación normal del índice en su lugar. Por ejemplo

 class ViewPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) { private val fragment = listOf("Kotlin" to KotlinListFragment(), "Java" to JavaListFragment(), "Android" to AndroidFragment()) override fun getCount() = 3 override fun getItem(i: Int) = fragment[i].second() override fun getPageTitle(i: Int) = fragment[i].first() } 

Parece que controlas el range de recuento, pero asumiendo que no lo tienes también puedes comparar el i con la longitud de la list y, si es mayor que la longitud, usa la longitud en su lugar. Eso debería manejar fácilmente su escenario de "dos variables" de una manera bastante manejable, creo.

  • ¿Cómo manejar los errores de escritura en Apache Jena?
  • no puede resolver la reference a los methods
  • ¿Cuál es la diferencia entre properties y parameters en Kotlin?
  • Android Espresso IntentsMatcher funciona en un dispositivo nuevo pero no antiguo
  • El tipo Out-Projected 'ArrayList <*>' prohíbe el uso de 'public fun fun add (índice: Int, elemento: E): Unidad definida en java.util.ArrayList'
  • ¿Cómo burlarse de los methods estáticos en Kotlin?
  • TornadoFX: Type-Safe CSS con otras bibliotecas
  • Objeto burlado con Mockito Kotlin Método de anulación
  • Cómo restringir kotlin de usar java api que se anuncia arriba de jdk1.6
  • Correctamente implementando esperar y notificar en Kotlin
  • Retrofit no se pudo publicar en samsung s3 versión Android 4.0.4 mientras estaba en datos