想給點(diǎn)擊加個(gè)條件switch語(yǔ)句,發(fā)現(xiàn)kotlin里面沒有,已經(jīng)用when語(yǔ)句替換了,那讓我們來(lái)看看when語(yǔ)句吧
class WhenTest : AppCompatActivity(),View.OnClickListener{
override fun onClick(p0: View?) {
/**
* 類似switch語(yǔ)句
*/
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")
}
/**
* 自動(dòng)轉(zhuǎn)型(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無(wú)關(guān) 所以不可能走這里 但是還是可以作為條件 沒有出現(xiàn)編譯錯(cuò)誤提示
*/
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")
/**
* 無(wú)自變量的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)
}
}
下面是點(diǎn)擊按鈕1出現(xiàn)的打印日志

when_log.png
發(fā)如果前面的條件成立,那么就直接跳出when區(qū)域,不再驗(yàn)證后面是否成立,自帶return??
無(wú)條件的when使用,還可以代替多條件的復(fù)雜if-elseif-else語(yǔ)句,那么我們來(lái)看下對(duì)比
以前寫法(個(gè)人,每個(gè)人可能寫法不同)
if (mobile.equals("")) {
ToastUtils.show(Login.this, "請(qǐng)輸入手機(jī)號(hào)");
break;
} else if(!Common.isMobile(mobile)){
ToastUtils.show(Login.this, "請(qǐng)輸入正確的手機(jī)號(hào)");
break;
}else if (TextUtils.isEmpty(yzmcode)) {
ToastUtils.show(Login.this, "請(qǐng)輸入短信驗(yàn)證碼");
break;
} else if (!yzmcode.equals(get_code)) {
ToastUtils.show(Login.this, "短信驗(yàn)證碼錯(cuò)誤");
break;
}else if(userpwd.length()<8||userpwd.length()>16){
makeText(Login.this,"您設(shè)置的密碼長(zhǎng)度須為8-16位,請(qǐng)重新設(shè)置", Toast.LENGTH_SHORT).show();
}else if(!Common.isSequence(userpwd)){
makeText(Login.this,"您設(shè)置的密碼安全性較低,請(qǐng)重新設(shè)置",Toast.LENGTH_SHORT).show();
}else {
//登錄請(qǐng)求
}
Kotlin
when{
mobile.equals("") -> ToastUtils.show(Login.this, "請(qǐng)輸入手機(jī)號(hào)")
!Common.isMobile(mobile) -> ToastUtils.show(Login.this, "請(qǐng)輸入正確的手機(jī)號(hào)")
TextUtils.isEmpty(yzmcode) -> ToastUtils.show(Login.this, "請(qǐng)輸入短信驗(yàn)證碼")
!yzmcode.equals(get_code) -> ToastUtils.show(Login.this, "短信驗(yàn)證碼錯(cuò)誤")
userpwd.length<8||userpwd.length>16 -> ToastUtils.show(Login.this, "您設(shè)置的密碼長(zhǎng)度須為8-16位,請(qǐng)重新設(shè)置")
!Common.isSequence(userpwd) -> ToastUtils.show(Login.this, "您設(shè)置的密碼安全性較低,請(qǐng)重新設(shè)置")
else -> postData()
}
至少代碼簡(jiǎn)潔了一點(diǎn)。