gpt4 book ai didi

ios - Swift 将泛型类型限制为 Type

转载 作者:搜寻专家 更新时间:2023-10-31 19:38:42 26 4
gpt4 key购买 nike

如何将泛型类型限制为类型,而不是类型的实例?

如果我有一个类:

class SomeClass<T: SomeProtocol> {}

我怎样才能确保T只是 AnyClass 的一个实例(这只是 AnyObject.Type )

我的协议(protocol)只有静态方法,为了调用这些方法我必须做 instance.dynamicType.protocolMethod而我想做 someType.protocolMethod

最佳答案

据我所知,Swift 不允许您将元类型用作泛型。 (我相信这符合 Sam Giddins wished for in Swift 3 的思路。)

但是,您可以将其用作值。不要将 T 设为类型参数,而是将其设为属性:

protocol SomeProtocol {
static func foo()
}

struct Concrete: SomeProtocol {
static func foo() {
print("I am concrete")
}
}

class SomeClass {
let T: SomeProtocol.Type

init(T: SomeProtocol.Type) {
self.T = T
}

func go() {
T.foo() // no need for dynamicType
}
}

SomeClass(T: Concrete.self).go()

如果如您所说,您的协议(protocol)仅包含静态方法,那么这就足够了。但是,如果您需要将泛型参数绑定(bind)到类型,那也是可行的:

class SomeClass<U: SomeProtocol> {
let T: U.Type

init(T: U.Type) {
self.T = T
}

func go(value: U) {
T.foo()
}
}

SomeClass(T: Concrete.self).go(Concrete())

关于ios - Swift 将泛型类型限制为 Type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33444057/

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