假设我们有以下协议并采用类:
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
可以静态引用SubA
via typealias
,这很好,但是当另一个类实例访问var sub
它时,理想情况下是返回一个具体实例,或者取决于 其中的某种私有状态机制,例如:SubA
SubB
class Head
class Head: HeadProtocol {
typealias S = SubA, SubB
fileprivate var isOn: Bool = false
var sub: S { return isOn ? SubA() : SubB() }
}
请问如何实现?
或者,如果这是不可能的,我们很乐意接受有关最佳替代解决方案的建议。
感谢您的阅读。