我的情况是我有一个包含associatedtype
. 在等于 的情况下Void
,我希望有一些默认行为(以使呼叫站点更方便)。我试图将示例归结为:
protocol FooType {
associatedtype T: Any
var bar: (String) -> T { get }
}
struct Foo<T>: FooType {
let bar: (String) -> T
}
extension Foo where T == Void { // Compile error: "Same-type requirement makes generic parameter 'T' non-generic".
init() {
self.bar = { _ in return }
}
}
这个想法是,在泛型类型为 的情况Void
下,传入一个函数(在示例中命名)是没有意义的(在我的场景中bar
)。因此,我只想在这个特定的上下文中为这个函数提供一个默认实现。
当尝试执行上述操作时,我得到的声音与尝试限制例如包含特定类型的类型时Same-type requirement makes generic parameter 'T' non-generic
发生的情况非常相似。Array
一种解决方法是引入一个协议,但对于Void
. 是否可以做我想做的事,或者这目前是 Swift 3 中的一个限制?