как мне сохранить ссылку на объект класса, соответствующий протоколу в Swift - PullRequest
0 голосов
/ 11 марта 2019

Возможно, я все еще думаю об Objective-C. Я хотел бы зарегистрировать классы для использования в шаблоне фабрики. Классы соответствуют протоколу, такому как:

protocol URLNavigation: class {
  static func canHandle(url: URL) -> Bool
  static func instantiate(with url: URL) -> UIViewController?
  var url: URL? { get set }
}

и тогда в моем классе Factory есть что-то вроде:

var registeredTypes: [UIViewController.self & URLNavigation]

Но я знаю, что строка выше неверна. Я пытаюсь сохранить ссылки на объекты классов, которые будут использоваться для создания экземпляров этих классов.

И мне также интересно, как бы я их реализовал, используя элемент в этом массиве 'selectedTypes'.

Надеюсь, понятно, чего я пытаюсь достичь. Возможно, есть другой подход?

1 Ответ

1 голос
/ 11 марта 2019

Вы можете сделать это следующим образом.

var registeredTypes: [(UIViewController & URLNavigation).Type].

...