UIViewController子类的Swift协议
是否可以声明协议并定义可以符合它的对象类型?
我有一组闭包,我想在我的项目中的各种不同的UIViewController
子类中配置。 (它们都是相关的)。
我想有一个工厂函数,它创建正确类型的UIViewController
子类,但然后将其作为协议类型返回。
这样我就可以配置各种闭包并将视图控制器推到导航控制器上。
我可以……
返回UIViewController
超类并将其推送到导航堆栈,但由于编译器不知道它符合协议,因此无法正确设置闭包。
要么…
返回协议类型,我能够正确设置闭包,但编译器不知道它是一个UIViewController
子类,所以我不能把它推到导航控制器上。
有办法做到这两点吗?
谢谢
在Objective C中,您可以声明一个如下变量:
UIViewController *variable;
不幸的是,对于Swift而言,这是不可能的,考虑到面向协议的Swift是如何,这很奇怪。
这是非常不舒服的,因为就像你发现的那样,编译器不能同时知道类和协议,所以你必须抛出两次,你必须在运行时检查对象是否是允许的类,并且必须在您的代码中记录它,以防止人们发送错误类型的对象。
是的你可以! 像这样做..
//一个协议,用于确保符合对象是UIViewController的子类
公共协议IamViewController {}
//使每个UIViewController都采用IamViewController协议
扩展UIViewController:IamViewController {}
//创建你的协议并添加一个必须是UIViewController的要求,如果它想要符合它
protocol vcObject:IamViewController {}