3
このメソッドのシグネチャは、スウィフト4でコンパイルできないことを不合理なようだ:Where句は、汎用パラメータを持つ関数でのみ有効ですか?
class Bar<ValueType> {
func version() throws -> String where ValueType == [String: Any] { ... }
}
(エラー:句は非ジェネリック宣言に添付することはできません)
が、これは罰金コンパイル:
class Bar<ValueType> {
func version<T>(_ foo: T? = nil) throws -> String where ValueType == [String: Any] { ... }
}
これがなぜこのような場合に誰かが洞察を持っていますか?
コンパイラの制限ではなく、ベストプラクティスを強制するためのwhere句の使用に関する制限はありますか? –
@SidManiいいえ、それは、関数が型の宣言本体の中にあることを意味するものの単なる結果です。これは、関数が型に存在するメソッドであることを意味します。あなたが持っているものは、そのタイプに存在するメソッドではありません。あなたは、その型にcan * might *メソッドが存在します。 – Alexander
@SidManiこれは可能なルールを作ることができましたが、それはトータルなショーショーになります。表示されるすべてのメソッドについて、関連する 'where'節をチェックして、メソッドが適用可能かどうかを確認する必要があります。これは、すべて同じwhere句を共有する多数のメソッドの場合に当てはまる可能性があります。それは非常に混乱し、不必要に複雑です – Alexander