有没有办法在 Swift 中编写以下内容:我似乎找不到未绑定(bind)通配符类型“?”的良好替代方案。也许这个模式可以在 Swift 中以不同的方式处理。
class MyDefinition {}
class DefinitionBuilder<B: DefinitionBuilder<?, T>, T> {}
class ObjectDefinitionBuilder<B: ObjectDefinitionBuilder<?, T>, T>: DefinitionBuilder<B, T> {}
class MyDefinitionBuilder: ObjectDefinitionBuilder<MyDefinitionBuilder, MyDefinition> {}
最佳答案
如果我正确理解问题,您可以将 DefinitionBuilder
定义为 protocol
,它使用 linkedtype
和 Self
如下:
class MyDefinition {
var a: Int = 0
}
protocol DefinitionBuilder {
associatedtype T
func withA(a: Int) -> Self
func build() -> T
}
protocol ObjectDefinitionBuilder: DefinitionBuilder {
}
class MyDefinitionBuilder: ObjectDefinitionBuilder {
private var _def = MyDefinition()
func withA(a: Int) -> Self {
_def.a = a
return self
}
func build() -> MyDefinition {
return _def
}
}
let definition = MyDefinitionBuilder().withA(5).build()
希望这会有所帮助。
关于Swift 通用未绑定(bind)通配符类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36660360/