在通用类中传递通用参数

时间:2019-05-21 17:00:26

标签: swift generics

是否可以迅速使用泛型获得类似下面的内容?任何帮助将不胜感激。

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

1 个答案:

答案 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 来访问titleABC中的XYZ

使ABCXYZ符合protocol PPP,并在titleABC中实现其XYZ属性。

print(option1.data?.title)
print(option2.data?.title)