约束通用类型是同一方法中另一个通用类型的子类

时间:2019-03-13 11:44:59

标签: swift generics

请考虑以下方法签名:

func someMethod<U: AnyObject, T: AnyObject>(_ firstClassType: U.Type?, and secondClassType: T.Type) where U: T {
    // Do something here
}

这会产生以下错误:

  

类型“ U”限制为非协议,类“ T”

是否可以将U约束为TT的子类?

如果我修改以下方法:

func someMethod<T: AnyObject>(_ firstClassType: T.Type?, and secondClassType: T.Type) {
    // Do something here
}

在调用如下方法时出现此错误:

someMethod(MySubclass.self, and: MyClass.self)
  

无法将类型“ MySubclass.Type”的值转换为预期的参数类型“ _.Type?”

如果我使用方法签名的第一种情况,但删除了where U: T约束,错误就消失了,一切似乎都还可以。但这也意味着我可以使用两种不相关的类型来调用该方法,这是我想避免的事情。

那么,我是否缺少某些东西,或者这是我在Swift中无法做到的?

0 个答案:

没有答案