首页 > 解决方案 > 如何使用函数类型的 typealias?

问题描述

我怎样才能使用这个类型?

typealias MyHandler = (Int, String) -> Unit

我试过这个但它不起作用:

var myHandler = MyHandler(1, "2")

标签: kotlin

解决方案


您正在尝试实例化 typealias 并且遇到interface doesn't have a constructor错误。据我了解,具有函数类型的 typealias 需要三个步骤:

  1. 定义 typealias 本身

    typealias MyHandler = (Int, String) -> Unit
    
  2. 声明该类型的动作

    val myHandler: MyHandler = {intValue, stringValue -> 
     // do something
    }
    
  3. 使用该动作,例如

    class Foo(val action: MyHandler) {
    
      val stateOne: Boolean = false
    
      // ...
    
      fun bar() {
    
        if (stateOne) {
          action.invoke(1, "One")
        } else {
          action.invoke(0, "notOne")
        }
      }
    }
    

推荐阅读