gpt4 book ai didi

Swift Generics - 允许子类作为参数传递

转载 作者:行者123 更新时间:2023-11-28 06:18:47 25 4
gpt4 key购买 nike

我想知道是否可以允许一个方法接受通用父类(super class)的任何子类。我已经在下面发布了我想要实现的示例代码。希望这能更好地描述我的情况。

import UIKit

class SuperDataClass {

}

class SubDataClass: SuperDataClass {

}

class SuperClass<T: SuperDataClass>: UITableViewCell {

}

class SubClass: SuperClass<SubDataClass> {

}

class Example {
func test(object: SuperClass<SuperDataClass>) {
print(object)
}
}

let object = SubClass()
Example().test(object: object)

在 playground 中运行它时,你会得到以下错误:

Playground execution failed: error: Generics.playground:20:24: error: cannot convert value of type 'SubClass' to expected argument type 'SuperClass<SuperDataClass>'

据我所知,原因是数据类型是该方法期望的数据类型的子类。

将第 15 行更改为

class SubClass: SuperClass<SuperDataClass> {

将解决问题,但不适用于我要实现的场景。我希望该方法可以处理任何子类化 SuperClass 的对象,并由该方法处理。这可能吗?为了实现这一目标,我应该使用更好的设置吗?

谢谢。

最佳答案

使测试通用:

class Example {
func test<T>(object: SuperClass<T>) {
print(object)
}
}

关于Swift Generics - 允许子类作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44315692/

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