想给点击加个条件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()
}
至少代码简洁了一点。
网友评论