【发布时间】:2021-07-13 09:53:06
【问题描述】:
我有一个具有如下关联类型的协议:
protocol Schedulable {
associatedtype Phase
var phase: Phase { get set }
var duration: TimeInterval { get set }
}
我有另一个协议,它定义了一个泛型类型的方法,该泛型类型受限于之前的协议:
protocol Performed {
func perform<S>(_ work: S) where S: Schedulable
}
现在假设我需要存储和检索往返于UserDefaults 的时间表。我需要任何符合Codable 协议的对象才能序列化其所有属性。特别是,我需要Schedulable 协议的关联类型符合Codable。顺便说一句,我不想把perform(_:)方法改成这样
func perform<S>(_ work: S) where S: Schedulable, S.Phase: Codable
我宁愿有另一种限制相位的方法。我考虑过使用可选的协议方法,但这些方法不适用于 Swift 结构。我怎样才能做到这一点?
【问题讨论】:
标签: swift generics swift-protocols