gpt4 book ai didi

swift - 如何在 swift 中对泛型变量使用非具体类型?

转载 作者:行者123 更新时间:2023-11-30 11:37:48 27 4
gpt4 key购买 nike

据我从互联网和 Xcode 了解到,你不能做这样的事情:

protocol Foo {}

class Bar<T: Foo> {

}

class A {
var some: Bar<Foo>! // this one
}

因为泛型变量的类型必须是具体的。如何绕过该限制?最简单的方法似乎是使用其他协议(protocol),例如 B ,然后更改 Bar<Foo>B ,然后是继承自 Bar 的所有类必须执行协议(protocol)B ,但似乎不太方便,所以也许还有其他方法?或者也许有人知道,Swift 将来会不支持具体的泛型吗?因为正如在 Kotlin 中看到的,这不是用编程语言可以完成的事情

最佳答案

我有一个例子,假设你想用一种好的方式实现注入(inject)。

class Injectable<T: ServiceProtocol> {
let type: ServiceProtocol.Type { return T.self }
var value: T!
}

然后使用类似的东西

class ViewModel {
let serviceA = Injectable<AbstractNetworkService>()
}

class DependencyProvider {
...
func injectDependencies(into object: AnyObject) {
// Here you would use a Mirror of object, go through every Injectable,
// and set their values.
}
}

这很好,因为您可以为 AbstractNetworkService(协议(protocol))注册一个实际的类,但 Swift 不允许您这样做。

关于swift - 如何在 swift 中对泛型变量使用非具体类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49557404/

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