У меня есть быстрый протокол, который содержит одно свойство:Swift понижающее приведение и протокольные переменные
protocol WireframeProtocol: class
{
var rootViewController: UIViewController { get }
}
я тогда класс, который реализует этот протокол как таковой:
class MenuWireframe : WireframeProtocol
{
let rootViewController: UIViewController
init()
{
self.rootViewController = MenuViewController(nibName: "MenuViewController", bundle: nil)
(self.rootViewController as! MenuViewController).presenter = MenuPresenter(interactor: MenuInteractor())
}
}
В моем каркасном классе переменной фактически является типом MenuViewController, но вместо этого он должен быть объявлен как UIViewController для подтверждения протокола. Я должен использовать (self.rootViewController as! MenuViewController), чтобы понизить его до нужного класса, который я хочу, чтобы иметь доступ к его свойствам. Это хорошо в моем простом примере выше, но не очень читаемо, особенно в более сложных ситуациях. Есть ли лучший способ объявить переменную протокола?
Большое спасибо!
Поскольку вы используете VIPER, вы можете/должны объявить RootViewController как протокол (Вид протокол), а также определить слабое свойство там, который будет ведущей , –
Привет, Даниэль, это правда, но это дело для другой цели. Я хочу иметь протокол, который соответствует каждому каркасу, который предоставляет UIViewController, который я могу использовать для целей навигации. Я полагаю, что я мог бы использовать этот протокол просмотра для этого, если протокол для UIViewControllers только ... ммм. Я проверю это и вернусь к вам. – bennythemink
@bennythemink, вы проверили мой ответ? –