【问题标题】:How to return value from the function in kotlin如何从kotlin中的函数返回值
【发布时间】:2017-04-08 14:51:32
【问题描述】:

我正在尝试从函数中返回布尔值。

fun  validateDetails(jabberId:String, passwordText: String) {

            if(jabberId.isEmpty()){
                jabber_id.requestFocus()
                jabber_id.error="Jabber id can't be null."
                 return false
            }else if(jabberId.isBlank()){
             jabber_id.requestFocus()
             jabber_id.error="Jabber id can't be blank."
              return false
            }else if (passwordText.isNotEmpty()){
                password.requestFocus();
                password.error="Password can't be null."
                 return false
            }
             else{
                 return true
            }   

    }

错误: 布尔文字不符合预期的类型 Unit。

我知道 unit 是 kotlin 中的默认返回类型。我将如何将其更改为布尔值。

【问题讨论】:

  • 删除大括号前的=。请正确缩进您的代码。
  • @JBNizet 已删除。但仍然是同样的错误
  • 添加函数的返回类型:: Boolean.
  • @AnkurKhandelwal 刚刚添加了一个关于你需要做什么的小解释

标签: kotlin


【解决方案1】:

Kotlin 只能在函数为表达式时推断函数的返回类型,所以如果你的函数有函数体,则需要在函数参数后指定返回类型

fun functionName(param: Type...): ReturnedType { 
    //function body
}

fun  validateDetails(jabberId:String, passwordText: String):Boolean {

            if(jabberId.isEmpty()){
                jabber_id.requestFocus()
                jabber_id.error="Jabber id can't be null."
                 return false
            }else if(jabberId.isBlank()){
             jabber_id.requestFocus()
             jabber_id.error="Jabber id can't be blank."
              return false
            }else if (passwordText.isNotEmpty()){
                password.requestFocus();
                password.error="Password can't be null."
                 return false
            }
             else{
                 return true
            }   

    }

正如 glee8e 所提到的,这可以使用表达式来完成。这就是它的完成方式。

fun  validateDetails(jabberId:String, passwordText: String) = when {
    jabberId.isEmpty() -> {
        jabber_id.requestFocus()
        jabber_id.error="Jabber id can't be null."

        false
    }

    jabberId.isBlank() -> {
        jabber_id.requestFocus()
        jabber_id.error="Jabber id can't be blank."

        false
    }

    passwordText.isNotEmpty() -> {
        password.requestFocus();
        password.error="Password can't be null."
        false
    }

    else -> true  
}

【讨论】:

  • 或者,您可以将此函数体转换为单个表达式,因为它只是一个大 if 表达式。
  • 刚刚更新了我的答案。谢谢你指出这一点。 xD 我还在习惯 Kotlin 的强大功能,所以我什至没有考虑过这种可能性
  • 既然你在使用kotlin,我假设你也在使用IDEA(由JetBrains创建,kotlin背后的团队),它的强大也是你应该注意的。如果您将指针设置在(您的 anwser 的)方法主体内,它会建议您将其更改为表达式主体。
  • 是的,我只玩了 Intellij IDEA 1 1/2 个月,所以我还在习惯它。顺便说一句,我不知道这个技巧。谢谢你的建议:)
猜你喜欢
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
相关资源
最近更新 更多