我有自定义UIView(CustomView
)符合两种不同的协议
protocol ResizableDelegate: class {
func view(view:UIView, didChangeHeight difference:CGFloat)
}
protocol Resizable: class {
var delegate:ResizableDelegate? { set get }
}
protocol TappableDelegate: class {
func viewDidTap(view:UIView)
}
protocol Tappable {
var delegate:TappableDelegate? { set get }
}
我需要在名为CustomView
的{{1}}类中拥有一个属性,同时符合这两个协议。我读过Types conforming to multiple protocols in swift,但这并没有解决我的问题。
我创建了这个协议
delegate
然后制作我的protocol CustomViewDelegate: ResizableDelegate, TappableDelegate {}
CustomView
但这导致我收到消息
class CustomView : UIView, Resizable, Tappable {
var delegate:CustomViewDelegate?
}
我不想拥有:
Type 'CustomView' does not conform to protocol 'Resizable'
是否有两种方法只有一个委托属性同时符合这两个协议?我使用swift 2.0,Xcode 7。
答案 0 :(得分:3)
我想你真的不需要声明Resizable
和Tappable
协议。您只需要将自定义视图委派给其他对象,该对象会向ResizableDelegate
和TappableDelegate
确认,对吗?如果是这样,这应该对你有用:
protocol ResizableDelegate: class {
func view(view:UIView, didChangeHeight difference:CGFloat)
}
protocol TappableDelegate: class {
func viewDidTap(view:UIView)
}
class CustomView : UIView {
var delegate: (ResizableDelegate, TappableDelegate)?
}
答案 1 :(得分:0)
虽然您可以保留原样,但我强烈建议将所需的属性更改为“tappableDelegate”和“resizableDelegate”,从而在View子类中具有两个单独的属性。
您的特定用例可能需要遵守这两种情况,但具有相同的命名意味着您将无法拥有不同的代理。