Swift 通用未绑定(bind)通配符类型

标签 swift generics

有没有办法在 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 ,它使用 linkedtypeSelf 如下:

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/

相关文章:

ios - Swift 数字泛型?

generics - 了解快速泛型与将参数视为协议(protocol)或基本类型

swift - 如何检查我的 NSObjects 数组是否包含 Swift 中的特定 NSObject?

ios - swift 2.3 到 swift 3.0

ios - 如何快速将base64转换为NSDATA

c# - Entity Framework - 如何获取列?

java - 设计模式 : Lazy Singleton, 泛型和继承 : java. lang.Class 无法转换为 java.lang.reflect.ParameterizedType

ios - 如何将 PFQueryTableViewController 放入 UIViewController iOS Swift

ios - 单击表格 View 单元格行时如何推送新的 View Controller ?

c# - 如何使用没有约束的类型参数调用具有泛型约束的方法?