В Objective-C вы можете указать как имя класса, так и набор протоколов в возвращаемом значении. Например, UIViewController, который является UIScrollViewDelegate:Swift: тип класса, который реализует протокол
- (UIViewController<UIScrollViewDelegate> *) viewDelegate;
Я не могу найти способ, чтобы выразить это в Swift. Что-то вроде этого не удается, поскольку UIViewController не является протоколом:
func viewDelegate() -> protocol<UIViewController, UIScrollViewDelegate>;
Просто интересно, почему вам требуется объявление протокола по типу возврата? – Woodstock
@Woodstock возвращаемое значение должно реализовывать методы как класса, так и протокола. Было бы неплохо, если бы проверяющий тип применял это вместо проверки во время выполнения. – kvance