我有一个协议......
protocol MyProtocol {}
我的一些视图控制器符合此协议......
class MyViewController: UIViewController, MyProtocol {}
其中一些人没有......
class OtherViewController: UIViewController {}
现在......我有一个需要两种UIViewController
类型的函数。根据他们的类型,我需要做不同的事情。
所以我有一个开关。在那个交换机中,我有时需要检查特定的类型,有时我需要检查协议的一致性。
switch (firstVC, secondVC) {
case is (MyViewController, OtherViewController):
// do something this works
case is (OtherViewController, MyViewController):
// do something else this works
case is (MyProtocol, MyProtocol):
// this breaks...
}
我得到的错误是......
从(UIViewController,UIViewController)转换为不相关的类型(MyProtocol,MyProtocol)总是失败
但我知道事实并非如此。
如何检查UIViewControllers
与我的协议的一致性?
由于
答案 0 :(得分:0)
错误的共鸣是你无法将元组投射到任何东西,特别是不是成员。
你可以使用case-let:
switch (firstVC, secondVC) {
case (let mvc as MyViewController, let ovc as OtherViewController):
// do something with mvc and ovc
case (let ovc as OtherViewController, let mvc as MyViewController):
// do something else
case (let m1 as MyProtocol, let m2 as MyProtocol):
// this breaks...
}
答案 1 :(得分:-1)
根据@MartinR
评论。
我可以用......
case let (_ as MyProtocol, _ as MyProtocol):
我可以发誓我以前曾尝试过。
事实上我需要在我的情况下做更多检查,所以我做了这个......
case let (a as MyProtocol, _ as MyProtocol) where !(a is MyViewController):
或者其他类似的东西。