为什么Swift中没有混合类协议类型?

时间:2015-09-25 20:51:24

标签: swift

我对Swift来说相对较新,而让我感到沮丧的一件事是无法创建表示类和协议的单一类型(类似于Objective-C中的Class<Protocol> *)。有protocol<Protocol1, Protocol2>运算符可以从多个协议创建新的协议类型;所以我的问题是,为什么使用类和协议这是不可能的?

我知道这可以使用泛型来完成(例如<T: Class where T: Protocol>)。但是,这看起来很糟糕,特别是在您可能希望将该类型存储在实例变量中但又不想在您的类中添加泛型以用于实现详细信息的情况下。

我想更好地理解为什么在Swift中这是不可能的。具体来说,我对如何实现(或定义)类和协议类型以及为什么不能将它们组合成单个类型感兴趣。

1 个答案:

答案 0 :(得分:1)

这个怎么样?

让我们宣布一个协议和一个类

protocol Wearable { }
class Computer { }

然后让我们宣布3个班级

class AppleWatch: Computer, Wearable { }
class Mac: Computer { }
class Jeans: Wearable { }

现在是一个接受必须扩展Computer并符合Wearable

的值的方法
func foo<T:Computer where T: Wearable>(something:T) { }

最后让我们测试一下:

foo(AppleWatch()) // OK
foo(Mac()) // error at compile time
foo(Jeans()) // error at compile time 

这是你的意思吗?