在泛型类中传递泛型参数
Posted
技术标签:
【中文标题】在泛型类中传递泛型参数【英文标题】:Passing generic parameters in a generic class 【发布时间】:2019-05-21 17:00:26 【问题描述】:是否有可能在 swift 中使用泛型得到类似下面的东西?任何帮助都将比其他任何事情都更重要。
class ABC
var title: String?
class Option: <T>
var name: String?
var data: T?
let object1 = ABC()
let option = Option(name: "Test", data: object1)
// Getting data again
let data = option.data
【问题讨论】:
class Option: <T>
应该是class Option<T>
@Sh_Khan:我期待的答案不在您标记为重复的示例中。事实上,下面的答案是我需要的。你能删除重复的标签吗?
【参考方案1】:
以下是在Swift
中使用Generics
的方法。
protocol PPP
var title: String? get set
class ABC: PPP
var title: String?
class XYZ: PPP
var title: String?
class Option<T>
var name: String?
var data: T?
init(name: String?, data: T?)
self.name = name
self.data = data
let object1 = ABC()
let option1 = Option(name: "Test1", data: object1)
let object2 = XYZ()
let option2 = Option(name: "Test2", data: object2)
由于Swift
中的classes
没有default initializer
,因此创建一个接受2 个参数的String?
和T?
。
您可以使用type(of:)
方法来识别type
的object
。
print(type(of: option1.data)) //ABC
print(type(of: option2.data)) //XYZ
您可以在ABC
和XYZ
中使用protocol
访问title
。
使ABC
和XYZ
符合protocol PPP
并在ABC
和XYZ
中实现其title
属性。
print(option1.data?.title)
print(option2.data?.title)
【讨论】:
感谢您的回答。但我需要确定最后一行中数据的数据类型。如果没有类型转换,我该怎么做? 这是正确的,我已经知道了。我正在寻找类似的东西: option1.data.title 我可以直接访问变量而不检查其类型吗?我想这可以使用协议来完成? 也更新了。试一试。 谢谢。这是一个很好的帮助。这是否意味着我必须在 PPP 协议中声明类 ABC() 和 XYZ() 的所有变量? 没有。但反过来是true
。您需要在ABC
和XYZ
中实现PPP
的强制variables
和methods
。以上是关于在泛型类中传递泛型参数的主要内容,如果未能解决你的问题,请参考以下文章