拡張機能を使用して、別のプロトコルにプロトコル準拠を追加することはできますか?
たとえば、A が B に準拠するようにします。
protocol A {
var a : UIView {get}
}
protocol B {
var b : UIView {get}
}
タイプ A のオブジェクトに B のデフォルトの実装 (準拠) を与えたい
// This isn't possible
extension A : B {
var b : UIView {
return self.a
}
}
動機は、独自の「ブリッジ」を作成せずに B が必要な場合に A のオブジェクトを再利用することです。
class MyClass {
func myFunc(object : A) {
...
...
let view = object.a
... do something with view ...
myFunc(object) // would like to use an 'A' without creating a 'B'
}
func myFunc2(object : B) {
...
...
let view = object.b
... do something with view ...
}
}
補足として、クラスを拡張してプロトコルを実装できます
class C {
let C : UIView
}
// this will work
extension C : B {
var B : UIView {
return self.c
}
}
プロトコルはデフォルトの実装を提供できます
extension A {
// a default implementation
var a : UIView {
return UIView()
}
}