请考虑以下方法签名:
func someMethod<U: AnyObject, T: AnyObject>(_ firstClassType: U.Type?, and secondClassType: T.Type) where U: T {
// Do something here
}
这会产生以下错误:
类型“ U”限制为非协议,类“ T”
是否可以将U
约束为T
或T
的子类?
如果我修改以下方法:
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中无法做到的?