情况
父类(super class)定义方法,子类重新定义该方法。唯一的区别是子类在一个 block 中添加了一个参数,它本身就是方法的一个参数。
一个例子
假设我有一个类 Collection
和一个后代类 List
,它们在其他方法中定义了一个 NSArray
风格的枚举方法.
@interface Collection : NSObject
- (void)enumerateObjectsUsingBlock: (void (^)(id obj))block;
@end
@interface List : Collection
- (void)enumerateObjectsUsingBlock: (void (^)(id obj, int index))block;
@end
问题
这是否适用(在所有平台上)并且是否符合标准?
我想它会起作用,因为父类(super class)方法中的参数列表不受影响,而子类方法的用户会知道(可选地进行一些类型转换)额外参数。
最佳答案
简而言之;不,不要这样做。
更长:
它在大多数情况下都有效,但您必须努力避免编译器警告。 Objective-C 不支持方法的协变或逆变声明(这就是创建 instancetype
的原因)。由于 block 类型不同,方法参数类型也不同。
你也不能假设一个函数、 block 或方法采用,比方说,(a)
、(a,b)、(a,b.c)
、(a,b,c,d)
等...将在调用站点兼容。 IE。你不能说 fun(a,b,c,d)
其中 fun
实际上是 fun(a)
并保证你会得到你所期望的。
关于objective-c - 子类可以在继承方法的参数中的 block 中添加参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20766168/