Как использовать typealias функционального типа? - PullRequest
0 голосов
/ 24 апреля 2019

как я могу использовать эту типалию?

typealias MyHandler = (Int, String) -> Unit

Я пробовал это, но это не работает:

var myHandler = MyHandler(1, "2")

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Вы пытаетесь создать экземпляр 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")
        }
      }
    }
    
0 голосов
/ 25 апреля 2019

typealias - это просто псевдоним для типа :), другими словами, это просто другое имя для типа.

Представьте, что вам нужно писать постоянно (Int, String) -> Unit.С помощью typealias вы можете определить что-то, что вы сделали, чтобы помочь и писать меньше, т.е. вместо:

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

Вы можете написать:

fun Foo(handler: MyHandler)

Они также помогают давать подсказки,Это означает, что они могут дать вам возможность описывать типы в более контекстуализированном виде.Представьте себе, что вы реализуете приложение, в котором время всего домена представлено как Int.Один из подходов, который мы могли бы использовать, заключается в определении:

typealias Time = Int

С этого момента каждый раз, когда вы хотите что-то кодировать конкретно со временем, вместо использования Int вы можете предоставлять больше контекста другим, используя Time,Это не новый тип, это просто другое имя для Int, поэтому все, что работает с целыми числами, тоже работает с ним.

Еще больше, если вы хотите иметь look

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...