如果我有一个传递类型为void *的参数的方法(UIView动画确实是stop方法,必须是一个void指针),或者类型为 id ,我知道参数是一个UIBarButton项,我需要禁用它,[barbuttonitem setEnabled:NO] ;,我应该将参数转换为UIControl,这是我需要能够使用setEnabled(没有警告),或者我应该把它一直扔到UIBarButtonItem?为什么呢?
谢谢!
答案 0 :(得分:2)
我会说把它投射到UIControl,以防万一实施在某些时候发生变化。我总是使用最合适的接口(不是实现),而UIControl可能就是这样。
答案 1 :(得分:1)
UIBarItem
不派生自UIControl
,因此投射到UIControl确实不是正确的事情。它的工作原理是因为这两个类恰好都有setEnabled:
个方法。
演员表只是另一种形式的文档;它们不会影响运行时发生的事情。如果您期望UIBarItem
,那么就这样投射。
答案 2 :(得分:0)
Casting只告诉编译器你期望某个类型的变量:它不导致传入的变量发生任何变化。你可以毫无后顾之忧地将它强制转换为UIBarButtonItem。
答案 3 :(得分:0)
如果我正确理解Objective-C,你可以直接在对象上调用setEnabled;你只是不能保证电话会通过。但如果您知道返回的对象是UIBarItem,那么您可以调用它。