Eu tinha o seguinte código no meu projeto:
val typeface = if (isBold && isItalic) {
Typeface.BOLD_ITALIC
} else if (isBold) {
Typeface.BOLD
} else if (isItalic) {
Typeface.ITALIC
} else {
Typeface.NORMAL
}
updateTypeface(typeface)
Então, decidi mudar meu código para este:
if (isBold && isItalic) {
Typeface.BOLD_ITALIC
} else if (isBold) {
Typeface.BOLD
} else if (isItalic) {
Typeface.ITALIC
} else {
Typeface.NORMAL
}.also { typeface ->
updateTypeface(typeface)
}
Mas quando o valor de isBold is true
and isItalic is false
, updateTypeface(typeface)
não está sendo chamado, embora o ponto de interrupção esteja parando na Typeface.BOLD
linha.
Estou faltando alguma coisa ou há um bug aqui?
Versão atual do plugin kotlin: 223-1.9.0-release-358-AS8836.35.2231.10811636
Versão do analisador: 1.9.0-release-358
Estúdio Android: Girafa | 2022.3.1 Patch 2
Versão de tempo de execução: 17.0.6+0-b2043.56-10027231
VM amd64: VM de servidor OpenJDK de 64 bits por JetBrains sro
Tente usar uma construção when assim:
O
.also { }
bloco só é aplicado à última instrução if else. Se você pegar este exemplo:Irá imprimir:
Você pode testar aqui
Para combater o problema, você pode colocar todas as instruções if else entre parênteses.
Ou use uma instrução quando sem argumentos.
No seu caso é assim: