Swift 扩展关联类型等于Void的自定义类型

Swift 扩展关联类型等于Void的自定义类型,swift,generics,swift3,protocols,protocol-extension,Swift,Generics,Swift3,Protocols,Protocol Extension,我的情况是,我有一个自定义类型,其中包含一个关联类型。如果这等于Void,我希望有一些默认行为(使调用站点更方便)。我试图把这个例子归结为: protocol FooType { associatedtype T: Any var bar: (String) -> T { get } } struct Foo<T>: FooType { let bar: (String) -> T } extension Foo where T == Void

我的情况是,我有一个自定义类型,其中包含一个
关联类型
。如果这等于
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 }
    }
}
protocolfootype{
关联类型T:任何
变量栏:(字符串)->T{get}
}
结构Foo:FooType{
let bar:(字符串)->T
}
扩展名Foo,其中T==Void{//Compile error:“同一类型要求使泛型参数'T'非泛型”。
init(){
self.bar={返回}
}
}
其思想是,在泛型类型为
Void
的情况下,(在我的场景中)传入一个函数(示例中名为
bar
)是没有意义的。因此,我只希望在这个特定上下文中为这个函数提供一个默认实现


当尝试执行上述操作时,我得到了
相同类型的要求,使得泛型参数“T”非泛型
,这听起来与试图限制时发生的情况非常相似,例如
数组
类型包含特定类型。一个解决方法是引入一个协议,但我不能为
Void
这样做。是否有可能实现我想要的功能,或者这是目前Swift 3中的一个限制?

从Swift 3.1开始,问题中发布的代码现在起作用。也就是说,以下功能现在可以正常工作:

protocol FooType {
    associatedtype T: Any
    var bar: (String) -> T { get }
}

struct Foo<T>: FooType {
    let bar: (String) -> T
}

extension Foo where T == Void { 
    init() {
        self.bar = { _ in return }
    }
}

let foo = Foo<String>(bar: { (t: String) in return "" })
let zoo = Foo<Void>()
protocolfootype{
关联类型T:任何
变量栏:(字符串)->T{get}
}
结构Foo:FooType{
let bar:(字符串)->T
}
扩展Foo,其中T==Void{
init(){
self.bar={返回}
}
}
让foo=foo(条:{(t:String)返回“”})
let zoo=Foo()