Mam następujący kod:Zmuszony do oddania, nawet jeśli protokół wymaga dany rodzaj
import UIKit
protocol Fooable: class where Self: UIViewController {
func foo()
}
class SampleViewController: UIViewController, Fooable {
func foo() {
print("foo")
}
}
let vc1: Fooable = SampleViewController()
let vc2: Fooable = SampleViewController()
// vc1.show(vc2, sender: nil) - error: Value of type 'Fooable' has no member 'show'
// (vc1 as! UIViewController).show(vc2, sender: nil) - error: Cannot convert value of type 'Fooable' to expected argument type 'UIViewController'
(vc1 as! UIViewController).show((vc2 as! UIViewController), sender: nil)
skomentował linie nie skompilować.
Dlaczego jestem zmuszony do oddania obiektu do protokołu typu UIViewController
nawet jeśli protokół Fooable
wymaga, że typy, które są zgodne z nim dziedziczyć UIViewController
?
tak, to działa, ponieważ 'vc1' i' vc2' są teraz typu 'SampleViewController'. Mój post jest oczywiście uproszczony, np. uważają, że te obiekty są zwracane z funkcji 'func buildVC (vcType: VCTypeEnum) -> Fooable' – zgorawski
@zgorawski czy możesz dodać więcej kodu źródłowego? Bez większej ilości szczegółów bardzo trudno będzie Ci pomóc. – jbouaziz
Nie, żadna klasa nie może zaimplementować tego protokołu, sprawdź to: https://ibb.co/ij1Wik – zgorawski