是否可以迅速使用泛型获得类似下面的内容?任何帮助将不胜感激。
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
答案 0 :(得分:1)
这是在Generics
中使用 Swift
的方式。
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)
由于classes
中的Swift
没有default initializer
,因此请创建一个接受2个参数-String?
和T?
的参数。
您可以使用type(of:)
方法来标识type
中的object
。
print(type(of: option1.data)) //ABC
print(type(of: option2.data)) //XYZ
您可以使用 protocol
来访问title
和ABC
中的XYZ
。
使ABC
和XYZ
符合protocol PPP
,并在title
和ABC
中实现其XYZ
属性。
print(option1.data?.title)
print(option2.data?.title)