Kotlin KCallable invalidArgumentException

时间:2019-01-20 15:22:24

标签: kotlin illegalargumentexception

我具有以下Kotlin功能:

lazy var name: UILabel = {
  let lb = UILabel()
  lb.text? = getthename()
  lb.lineBreakMode = NSLineBreakMode.byWordWrapping
  lb.textColor = .mainGreen
  lb.textAlignment = .left
  lb.font = UIFont.boldSystemFont(ofSize:12.0)
  return lb
}()

func getthename() -> String {
  var wins : String = ""
  let ud = (Auth.auth().currentUser?.uid)
  self.ref = Database.database().reference()
  self.ref.child("Users").child(ud!).observeSingleEvent(of: .value, with: {(snapshot) in
    if let getData = snapshot.value as? [String:Any] {
      wins = (getData["lastName "] as? String)!
    }
  })
  return wins
}

此列表中有多少参数无关紧要,我总是会得到一个fun invokeSync(typedArguments : List<Any?>): Any?{ var returnedValue : Any? try { returnedValue = callable.call(this, typedArguments); } catch (e:Exception) { logInvocationError(e, typedArguments); throw IllegalArgumentException(e); } } 的说法:“ Callable期望3个参数,但提供了1个”。

该函数是一个简单的isGreater函数,带有2个IllegalArgumentException类型的参数。 我已经检查了参数列表,其中有2个类型为Int的参数。

此处是上下文中的函数:

Int

有人可以帮助我并告诉我有什么问题吗?可以给我提示吗?

1 个答案:

答案 0 :(得分:2)

由于call使用vararg,因此您需要使用扩展运算符*toTypedArray()来传递List,如下所示:

returnedValue = callable.call(this, *typedArguments.toTypedArray());

第一个参数是您要在其上调用函数的实例,其他两个参数来自扩展的List,条件是List恰好具有两个元素。