2

假设我们有以下协议并采用类:

protocol SubProtocol {
    func doSomething( with: Self )
}
class SubA: SubProtocol {
    func doSomething( with: SubA ){}
}
class SubB: SubProtocol {
    func doSomething( with: SubB ){}
}

然后我们创建一个HeadProtocol我们需要包含'SubProtocol'的实例

protocol HeadProtocol {
    associatedtype S
    var sub: S { get }
}

class Head: HeadProtocol {
    typealias S = SubA
    var sub: S { return S() }
}

class Head可以静态引用SubAvia typealias,这很好,但是当另一个类实例访问var sub它时,理想情况下是返回一个具体实例,或者取决于 其中的某种私有状态机制,例如:SubASubBclass Head

class Head: HeadProtocol {
    typealias S = SubA, SubB
    fileprivate var isOn: Bool = false
    var sub: S { return isOn ? SubA() : SubB() }
}

请问如何实现?

或者,如果这是不可能的,我们很乐意接受有关最佳替代解决方案的建议。

感谢您的阅读。

4

0 回答 0