这是我的代码:
class Person<T> {
func printMyType() {
// I have access to type T.
print(T.self)
}
}
class Child {
let person = Person<Any>()
func printPersonType() {
// Where did type T went to? It doesn't compile.
print(person.T.self)
}
}
我想知道为什么我不能输入
T
再举个例子
Person
例如
Child
. 为什么是类型
T型
跑了?为什么在方法中可用
printMyType
,但不在实例之外?
以上是我的问题。下面是我想如何使用它。
人
class Person<T: Child> {}
class Child {}
// In this class, I want to know what Child is used.
// To accomplish this, I now need to create a type U to access Child
// Since I do not know how to access the generic type of Person.
class BirthGiver<T: Person<U>, U: Child> {
let child: U.Type
let person: Person<U>.Type
init(person: T.Type, child: U.Type) {
self.person = person
self.child = child
}
}
我需要称之为非常丑陋(重复的代码,两次
,可能类型不安全?):
BirthGiver(person: Person<Child>.self, child: Child.self)
class BirthGiver<T: Person<U>> {
let child: Person.T
let person: Person<U>.Type
init(person: T.Type) {
self.person = person
self.child = person.U
}
}
所以我可以这样称呼它:
BirthGiver(person: Person<Child>.self)
但这不会编译,因为没有这样的类型
U
. 我明白,但有什么办法吗?一直重复泛型是不对的。