UIViewController子类的Swift协议

是否可以声明协议并定义可以符合它的对象类型?

我有一组闭包,我想在我的项目中的各种不同的UIViewController子类中配置。 (它们都是相关的)。

我想有一个工厂函数,它创建正确类型的UIViewController子类,但然后将其作为协议类型返回。

这样我就可以配置各种闭包并将视图控制器推到导航控制器上。

我可以……

返回UIViewController超类并将其推送到导航堆栈,但由于编译器不知道它符合协议,因此无法正确设置闭包。

要么…

返回协议类型,我能够正确设置闭包,但编译器不知道它是一个UIViewController子类,所以我不能把它推到导航控制器上。

有办法做到这两点吗?

谢谢

在Objective C中,您可以声明一个如下变量:

 UIViewController  *variable; 

不幸的是,对于Swift而言,这是不可能的,考虑到面向协议的Swift是如何,这很奇怪。

这是非常不舒服的,因为就像你发现的那样,编译器不能同时知道类和协议,所以你必须抛出两次,你必须在运行时检查对象是否是允许的类,并且必须在您的代码中记录它,以防止人们发送错误类型的对象。

是的你可以! 像这样做..

//一个协议,用于确保符合对象是UIViewController的子类

公共协议IamViewController {}

//使每个UIViewController都采用IamViewController协议

扩展UIViewController:IamViewController {}

//创建你的协议并添加一个必须是UIViewController的要求,如果它想要符合它

protocol vcObject:IamViewController {}