我想将一个对象传递给一个符合协议的方法,并且能够调用定义该协议的方法。但是,我无法找到任何方法。例如:
+ (void)prepareToBounceInView:(UIView*<PixelUI>)pixelUIView
fromEdge:(PixelUIViewBounceEdge)edge;
该方法的第一个参数是UIView子类,它应该符合PixelUI
协议,然后该方法应该能够访问协议中定义的属性和调用方法。
唯一有效的方法是使用id<PixelUI>
作为对象的类型,但是我无法访问对象本身的任何属性或方法,只能访问协议中定义的属性或方法;因此,当我需要将对象视为对象时,我必须将对象重新强制转换为(UIView*)
,而不是作为委托。这会产生一些丑陋的语法,如下所示:
UIView *view = (UIView*)pixelUIView;
view.frame = pixelUIView.bounceBackFrame;
其中view
和pixelUIView
实际上是同一个对象,但必须使用两个不同的变量名来访问。
如果这是不可能的话,那么我将按照我的方式进行,并将其作为id
传递,然后重新投射。但如果有一些语法允许我将其作为实际对象传递,同时仍然指定其协议,我很乐意知道。
答案 0 :(得分:2)
协议和明星的顺序很重要:
+ (void)prepareToBounceInView:(UIView<PixelUI> *)pixelUIView
fromEdge:(PixelUIViewBounceEdge)edge;
这样就不需要演员了。