如何在Objective-C方法参数中指定遵循协议的对象类型?
解决方法:同时指定类类型与协议的参数声明
嘿,你想要的这种无需强制转换、同时支持类属性和协议方法的写法,Objective-C其实早就支持啦!
你只需要把参数类型写成 UIView<PixelUI> * 就行——这就是同时指定类和协议的语法,完美匹配你的需求。
修改后的方法声明:
+ (void)prepareToBounceInView:(UIView<PixelUI> *)pixelUIView fromEdge:(PixelUIViewBounceEdge)edge;
这样声明之后,在方法内部直接使用 pixelUIView 就能同时访问:
- UIView 本身的所有属性和方法(比如
frame、alpha、addSubview:等) - PixelUI 协议定义的所有属性和方法(比如你提到的
bounceBackFrame)
举个例子,原来需要强制转换的代码可以简化成:
pixelUIView.frame = pixelUIView.bounceBackFrame;
完全不需要额外创建变量或者强制类型转换,语法简洁又安全,编译器还会帮你做类型检查,避免错误。
这种写法是Objective-C针对“需要对象既是某个类的实例,又遵循特定协议”场景设计的标准用法,比用 id<PixelUI> 再强转的方案优雅太多啦!
内容的提问来源于stack exchange,提问作者mashers
相关产品推荐
相关产品推荐

