美文网首页
Kotlin -----when语句

Kotlin -----when语句

作者: DSunshine13 | 来源:发表于2018-05-23 18:53 被阅读0次

    想给点击加个条件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()
            }
    

    至少代码简洁了一点。

    相关文章

      网友评论

          本文标题:Kotlin -----when语句

          本文链接:https://www.haomeiwen.com/subject/ychdjftx.html