gpt4 book ai didi

swift - 泛型类中的变量获取错误类型

转载 作者:搜寻专家 更新时间:2023-11-01 06:06:42 24 4
gpt4 key购买 nike

请考虑以下类:

// Models:
class A {}
class B: A { }
class C: B { }

// Cache:
class AbstractCache<T> {}

// Services:
class AbstractService<T> {
let cache = AbstractCache<T>()
}
class ServiceA<T: A>: AbstractService<T> {}
class ServiceB<T: B>: ServiceA<B> {}
class ServiceC<T: C>: ServiceB<C> {}

现在当我这样做时:

let serviceC = ServiceC()
print(serviceC.cache.dynamicType)

我期待得到 AbstractCache<C>.Type , 但我得到 AbstractCache<B>.Type反而。为什么会发生这种情况以及如何获得 cache 的正确类型ServiceC 中的变量类实例?

最佳答案

那是因为您明确键入了 ServiceAB。您应该使用 T 键入它以按照您想要的方式运行。

试试下面的代码,它可能会像您预期的那样工作。

// Tested @ Playground
class ServiceA<T: A>: AbstractService<T> {}
class ServiceB<T: B>: ServiceA<T> {}
class ServiceC<T: C>: ServiceB<T> {}

let serviceC = ServiceC()
print(serviceC.cache.dynamicType)

// prints "AbstractCache<C>\n"

关于swift - 泛型类中的变量获取错误类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35338485/

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