В Swift эти однопроцессные протоколы, так как обработчики событий не нужны. В Swift вы можете создать любой тип closure , который вы хотите.
Ваш метод onClick
может быть представлен типом закрытия () -> Void
(не принимает параметров и возвращает Void
). Вместо setOnClickListener
в качестве метода вы можете просто объявить onClick
как свойство:
var onClick: (() -> Void)?
И тогда вы можете установить его так же, как и для любого другого свойства:
onClick = {
print("I am clicked!")
}
Чтобы позвонить onClick
, вы можете сначала развернуть его, чтобы убедиться, что это не ноль:
if let onClick = self.onClick {
onClick()
}
// or
onClick?()
Если вы знакомы с Java 8, типы замыканий подобны функциональным интерфейсам, за исключением того, что вы получаете больше свободы с типами замыканий. Consumer<String>
будет соответствовать (String) -> Void
, Function<String, Integer>
будет соответствовать (String) -> Int
и т. Д.