0
上の制約を作成する方法私はUIView
から継承したクラスで実装することができ、プロトコルを作成しようとしました、私の驚きだったものを、このコードは(スウィフト3.0に)エラーなしでコンパイルする場合:プロトコル
protocol TestsProtocol {
func test()
}
extension TestsProtocol where Self: UIView { }
class FooClass: TestsProtocol {
func test() {
}
}
我々 FooClass
はUIView
から継承していないことがわかります。プロトコル拡張を使用すると、UIView
を継承するクラスだけがそれを実装できるように強制することはありません。 私が知っている限り、これはSwift 2.1でコンパイルされませんでした。
Swift 2.1でこれがコンパイルされない理由を考えることはできません。プロトコル拡張はプロトコルに準拠できるタイプを制限しておらず、デフォルトの実装を追加するだけです。しかし実際の問題は、あるタイプのプロトコルがすべての要件を満たすことができるかどうかです。なぜなら、それがUIViewでもなければ、適合させるべきではないのはなぜですか? – Hamish
[指定されたクラスタイプに対してのみ適用可能な[extension]の重複の可能性があります](http://stackoverflow.com/questions/41349324/extension-that-can-only-be-applied-on-a-given-class-タイプ) - 私はそこでの答えがあなたが望むものを正確に達成するとは信じていませんが。答えは、準拠タイプに基づいてプロトコルへの適合を制限することはできません。 – Hamish