在方法参数中指定对象的协议

时间:2018-01-22 11:59:10

标签: ios objective-c

我想将一个对象传递给一个符合协议的方法,并且能够调用定义该协议的方法。但是,我无法找到任何方法。例如:

+ (void)prepareToBounceInView:(UIView*<PixelUI>)pixelUIView 
    fromEdge:(PixelUIViewBounceEdge)edge;

该方法的第一个参数是UIView子类,它应该符合PixelUI协议,然后该方法应该能够访问协议中定义的属性和调用方法。

唯一有效的方法是使用id<PixelUI>作为对象的类型,但是我无法访问对象本身的任何属性或方法,只能访问协议中定义的属性或方法;因此,当我需要将对象视为对象时,我必须将对象重新强制转换为(UIView*),而不是作为委托。这会产生一些丑陋的语法,如下所示:

UIView *view = (UIView*)pixelUIView;
view.frame = pixelUIView.bounceBackFrame;

其中viewpixelUIView实际上是同一个对象,但必须使用两个不同的变量名来访问。

如果这是不可能的话,那么我将按照我的方式进行,并将其作为id传递,然后重新投射。但如果有一些语法允许我将其作为实际对象传递,同时仍然指定其协议,我很乐意知道。

1 个答案:

答案 0 :(得分:2)

协议和明星的顺序很重要:

+ (void)prepareToBounceInView:(UIView<PixelUI> *)pixelUIView 
    fromEdge:(PixelUIViewBounceEdge)edge;

这样就不需要演员了。