在Swift 4中声明一个既是子类又符合协议的元类型

11

这不是 In Swift, how can I declare a variable of a specific type that conforms to one or more protocols? 的重复。该问题针对我需要元类型的具体用例,而且如何实现并不明显。

在Swift 4中,可以声明一个既是子类又符合多个协议的变量:

var myVariable: MyClass & MyProtocol & MySecondProtocol

我需要这样的一致性,但不是针对实例,而是针对类型本身。具体来说,是为了以下语法:

var classForCell: UICollectionViewCell.Type & AdditionalHeightable.Type

我在使用Swift 4时遇到了以下错误:

Non-protocol, non-class type 'UICollectionViewCell.Type' cannot be used within a protocol-constrained type

如何声明一个既是子类又符合协议的元类型?

1个回答

20

在Swift 4中声明一个既是子类又符合某个协议的类型,您可以使用以下语法:

var classForCell: (UICollectionViewCell & AdditionalHeightable).Type

我在回答自己的问题,但是花了我几个小时才找到答案。希望这对某些人有所帮助。我一直在尝试泛型,虽然它也可以表达这个意思,但在其他方面受到了限制。 - Marián Černý
请将其标记为正确答案,即使它是您对问题的解决方案。 - Luzo
有点惊讶这样的代码居然能编译通过,更别说还能正常运行了!Swift 编译器团队可能在这方面做出了一些贡献... ;) - Paulo Mattos
当我尝试将变量分配为委托时,出现以下错误:无法将类型'(UIViewController&ExperienceDelegate).Type'分配给类型'ExperienceDelegate?' 有什么想法如何处理这个问题吗? - Hadi Sharghi
您正在分配一个类型,但实际上需要的是一个实例。在您的情况下,您可能不需要 (UIViewController & ExperienceDelegate).Type,而是直接使用 UIViewController & ExperienceDelegate 即可。 - Marián Černý
非常感谢您找到了这个解决方案!!!它节省了我数小时的时间。 - pizza7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接