come usare il tipo di carattere di funzione?

come posso usare questo tipo di errore?

typealias MyHandler = (Int, String) -> Unit

ho provato questo ma non funziona:

var myHandler = MyHandler(1, "2")

EN From: How to use typealias of function type?

More similar articles:

3 Comments

  1. si sta cercando di instantiare un tipo alias e stanno ottenendo interface doesn't have a constructor errore. a mio avviso, i caratteri tipografici con i tipi di funzione funzionano con tre fasi:

    1. definire il carattere stesso

      typealias MyHandler = (Int, String) -> Unit
    2. dichiarare un’azione di quel tipo

      val myHandler: MyHandler = {intValue, stringValue -> 
       // do something
      }
    3. utilizzare tale azione, ad esempio

      class Foo(val action: MyHandler) {
      
        val stateOne: Boolean = false
      
        // ...
      
        fun bar() {
      
          if (stateOne) {
            action.invoke(1, "One")
          } else {
            action.invoke(0, "notOne")
          }
        }
      }
  2. typealias sono solo un alias per il tipo:) in altre parole, è solo un altro nome per il tipo.

    immaginate di dover scrivere tutto il tempo (Int, String) -> Unit. con typealias è possibile definire qualcosa come hai fatto per aiutare e scrivere di meno, cioè invece di:

    fun Foo(handler: (Int, String) -> Unit)

    puoi scrivere:

    fun Foo(handler: MyHandler)

    aiutano anche a dare suggerimenti, nel senso che possono dare un modo per descrivere i tipi in un modo più contestualizzato. immaginate di implementare un app in cui è tutto il tempo di dominio è rappresentato come un Int. un approccio che potremmo seguire è definire:

    typealias Time = Int

    da lì in poi, ogni volta che si desidera codificare qualcosa in particolare con il tempo, invece di utilizzare Int è possibile fornire più contesto agli altri utilizzando Time. questo non è un nuovo tipo, è solo un altro nome per un Int, quindi tutto ciò che funziona con interi funziona anche con esso.

    c’è di più se vuoi dare un’occhiata

Leave a Reply

Your email address will not be published. Required fields are marked *