gpt4 book ai didi

Swift 协变泛型函数 : placeholder type is a subclass of another

转载 作者:行者123 更新时间:2023-11-30 10:48:42 24 4
gpt4 key购买 nike

我有一个函数,它接受两个类作为参数。我希望第一个是 NSObject 的子类(到目前为止非常简单),第二个是子类或与另一个类相同的类 - 我该如何表达这一点?

class MyClass: NSObject {}
class MySubClass: MyClass {}
myFunction(MyClass.Type, MySubClass.Type)

MyFunction 定义如下:

func myFunction<T: NSObject>(param1: T.Type, param2: T.Type)

不幸的是,由于 MyClass 和 MySubClass 不同(并且我对 myFunction 的定义期望它们完全相同),因此 '(MyClass.Type, MySubClass.Type)' 的调用错误不能转换为'(MyClass.Type, MyClass.Type)'

如何表达 myFunction 的第二个参数的类型不需要与第一个参数的类型相同,而只需 __kindof ,就像用 Objective-C 写的那样?

编辑:看来我的问题不清楚。以下还不够: func myFunction<T:NSObject,U:NSObject>(param1: T.Type, param2: U.Type)...因为它允许我将其调用为 myFunction(param1: MyClass.Type, param2: AnotherClass.Type) AnotherClass 定义为 class AnotherClass : NSObject 。在这种情况下,AnotherClass 位于 MyClass 的继承层次结构之外。

这就是为什么我给出了 __kindof 的例子,它正好表达了这一点(在 ObjC 中)——即协变泛型。

最佳答案

这是您需要的还是不需要的?运行没有问题。

class MyClass: NSObject {}
class MySubClass: MyClass {}

func myFunction<T: NSObject>(param1: T.Type, param2: T.Type){
print("OK")
}
myFunction(param1: MyClass.self, param2: MySubClass.self as MyClass.Type)

myFunction(param1: type(of: MyClass()), param2: type(of: MySubClass()))

关于Swift 协变泛型函数 : placeholder type is a subclass of another,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55141132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com