Kotlin -----when语句

2018-05-23  本文已影响0人  DSunshine13

想给点击加个条件switch语句,发现kotlin里面没有,已经用when语句替换了,那让我们来看看when语句吧

class WhenTest : AppCompatActivity(),View.OnClickListener{
    override fun onClick(p0: View?) {
        /**
         * 类似switch语句
         */
        when(p0?.id){
            R.id.btnone -> Log.i(AUTHOR_NAME,btnone.text.toString())
            R.id.btntwo -> Log.i(AUTHOR_NAME,btntwo.text.toString())
            R.id.btnthree -> Log.i(AUTHOR_NAME,btnone.text.toString())
            //如果else
//            else -> Log.i(AUTHOR_NAME,"else text")
        }


        /**
         * 自动转型(Auto-casting)
         */
        when(p0){
            is TextView -> Log.i(AUTHOR_NAME,"is textView")
            is Button -> Log.i(AUTHOR_NAME,"is ButtonView")
            is View -> Log.i(AUTHOR_NAME,"is View")
            /**
             * p0是属于View类型的,和Array无关 所以不可能走这里 但是还是可以作为条件  没有出现编译错误提示
             */
            is Array<*> -> Log.i(AUTHOR_NAME,"is Array")
            else -> Log.i(AUTHOR_NAME,"is Array")
        }


        var q = 12;
        var w = "sadfa"
        var e = true
        var r = DataPerson("11",13,"1111")

        /**
         * 无自变量的when
         */
        when{
            q in 1..10 -> Log.i(AUTHOR_NAME,"qwer int text")
            w.contains("s") -> Log.i(AUTHOR_NAME,"qwer String text")
            r.age == 13 -> Log.i(AUTHOR_NAME,"qwer DataPerson text")
            e -> Log.i(AUTHOR_NAME,"qwer booelan text")
            else ->Log.i(AUTHOR_NAME,"qwer else text")
        }


    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.whentest)
        btnone.setOnClickListener(this)
        btntwo.setOnClickListener(this)
        btnthree.setOnClickListener(this)
    }
    
}

下面是点击按钮1出现的打印日志


when_log.png

发如果前面的条件成立,那么就直接跳出when区域,不再验证后面是否成立,自带return😂
无条件的when使用,还可以代替多条件的复杂if-elseif-else语句,那么我们来看下对比

以前写法(个人,每个人可能写法不同)

if (mobile.equals("")) {
                  ToastUtils.show(Login.this, "请输入手机号");
                  break;
              } else if(!Common.isMobile(mobile)){
                  ToastUtils.show(Login.this, "请输入正确的手机号");
                  break;
              }else if (TextUtils.isEmpty(yzmcode)) {
                  ToastUtils.show(Login.this, "请输入短信验证码");
                  break;
              } else if (!yzmcode.equals(get_code)) {
                  ToastUtils.show(Login.this, "短信验证码错误");
                  break;
              }else if(userpwd.length()<8||userpwd.length()>16){
                  makeText(Login.this,"您设置的密码长度须为8-16位,请重新设置", Toast.LENGTH_SHORT).show();
              }else if(!Common.isSequence(userpwd)){
                  makeText(Login.this,"您设置的密码安全性较低,请重新设置",Toast.LENGTH_SHORT).show();
              }else {
                  //登录请求
}

Kotlin

when{
            mobile.equals("") -> ToastUtils.show(Login.this, "请输入手机号")
            !Common.isMobile(mobile) -> ToastUtils.show(Login.this, "请输入正确的手机号")
            TextUtils.isEmpty(yzmcode) -> ToastUtils.show(Login.this, "请输入短信验证码")
            !yzmcode.equals(get_code) -> ToastUtils.show(Login.this, "短信验证码错误")
            userpwd.length<8||userpwd.length>16 -> ToastUtils.show(Login.this, "您设置的密码长度须为8-16位,请重新设置")
            !Common.isSequence(userpwd) -> ToastUtils.show(Login.this, "您设置的密码安全性较低,请重新设置")
            else -> postData()
        }

至少代码简洁了一点。

上一篇下一篇

猜你喜欢

热点阅读