Протоколы наследования и типирования непонимания - PullRequest
0 голосов
/ 16 мая 2018

Я немного смущен.Пожалуйста, посмотрите на этот пример.

Я создал протокол VM:

protocol VM {

}

И этот протокол используется в моей реализации VC

final class VC: UIViewController {
    let viewModel: VM
}

Теперь я создаю специальные новые протоколы

protocol AwesomeProtocol {

}

protocol AwesomeViewProtocol {
     var viewModel: AwesomeProtocol { get }
}

Моя идея состоит в том, чтобы расширить VM с помощью Awesomeness, поэтому:

protocol VM: AwesomeProtocol {

}

final class VC: UIViewController, AwesomeViewProtocol {
    let viewModel: VM
}

Но здесь я встретил ошибку компилятора:

Тип 'VC' несоответствует протоколу 'AwesomeViewProtocol'

Несмотря на то, что VM extension AwesomeProtocol

Кто-то может объяснить мне, что я делаю неправильно?

1 Ответ

0 голосов
/ 16 мая 2018

Вы должны реализовать это.

final class VC: UIViewController, AwesomeViewProtocol {
    var viewModel: AwesomeProtocol
}

вычисленные переменные близки к функциям.Их подписи должны быть одинаковыми в родительских и дочерних (унаследованных) классах / протоколах.

Если вам нужно что-то, используйте аннотации assosiatedtype и универсальные классы.

...