3
associatedtype
を含むカスタムタイプがある状況です。これがVoid
に等しい場合、私はコールサイトをより便利にするためにいくつかのデフォルトの動作をしたいと思います。 bar
という名前(アイデアは、ジェネリック型が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 }
}
}
:私はダウンに例を沸騰してみましたこの例では)。したがって、私はこの特定のコンテキストでこの関数のデフォルトの実装をしたいだけです。
上記を実行しようとすると、Same-type requirement makes generic parameter 'T' non-generic
が非常に似ています。特定のタイプを含む場合はArray
タイプです。この問題を回避するには、プロトコルを導入することですが、Void
についてはできません。私は欲しいものをやることができるのですか、それともSwift 3の現在の制限ですか?