Kotlin switch-statement有两个以上的变量?

时间:2017-09-02 12:36:46

标签: android if-statement kotlin

假设我设置了getCount()= 3,如何指定要为第三个项检索哪个片段和页面标题?

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"

2 个答案:

答案 0 :(得分:3)

使用when expression

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

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

when (getCount()) {

   0 -> {
   // do something here
   }
   // etc.
   else -> {}
}

答案 1 :(得分:1)

我知道这不是你真正要求的,但实际上可能更容易拥有配对列表并进行正常的索引检索。例如

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()
}

看起来你控制了计数范围,但假设你没有,你也可以将i与列表的长度进行比较,如果大于长度,则使用长度代替。这应该能够以一种相当易于管理的方式轻松处理您的“两变量”场景。