我不认为我在这个网站上找到了一个与我自己相似的例子,尽管我确定这会一直弹出,我刚刚在my book完成了关于这个主题的章节。
我不是在寻找任何复杂的东西,但我只想为NSMutableArray
添加一些特定类型的对象的功能,因为我不想继承NSMutableArray
因为它似乎太难了,但我可能会改变主意。
我想要一个提供NSMutableArray
符合NDVector
协议的类别能够执行某些操作,例如计算范数,围绕轴旋转等等。
我尝试了几件事,我现在认为它应该是这样的:
@protocol NDVector <NSMutableArray>
并在那里声明方法@interface NSMutableArray (NDVector)
,...也声明方法?@implementation NSMutableArray (NDVector)
NSMutableArray<NDVector>
(我来自Java),像这样的对象NSMutableArray<NDVector> vec = [[NSMutableArray alloc] init]
我该怎么做呢?请不要只发送一个链接,提供与我的方法相似的解释,但需要采取正确的步骤。
答案 0 :(得分:2)
目前的方法都不是最好的方法。我建议你创建一个矢量类,恰好在它自己的实现中使用一个可变数组。
你的vector类中甚至可以有一个带有数组的init
方法。
答案 1 :(得分:0)
我不确定我是否理解你的问题。如果你想对一组向量进行一些操作,那么你基本上有三种可能性:
1。继承
对于NSMutableArray
,子类化实际上不是一个选项,因为它要求我们重新实现数组。
2。封装
数组隐藏在(在类扩展中)内部,无法直接访问。
@interface NDVectorArray : NSObject
- (void)addVector:(NDVector *)vector;
//TODO: add the methods you want
@end
@interface NDVectorArray ()
@property (nonatomic, strong, readwrite) NSMutableArray *elements;
@end
@implementation NDVectorArray
- (void)addVector:(NDVector *)vector {
[self.elements addObject:vector];
}
//add the methods you want
@end
3。分类
这只添加方法,不包含对象类型的检查。
@interface NSMutableArray (NDVector)
//add the methods you want
@end
@implementation NSMutableArray (NDVector)
//implement any methods you want
@end
摘要
在我看来,第3名将很难使用。第二个将易于实施和使用。
答案 2 :(得分:0)
如果我按照正确的方法,你基本上想要一个NSMutableArray
的子类,其中(a)代表NDVector
的实例,(b)具有额外的NDVector
特定的方法,这些方法对数组作为一个整体。
第一个子类NSMutableArray
,它并不难,代码和(a)可以在this answer中找到 - 该代码可以用于任何类型。您可以将其专门化为NDVector
,您可能还想添加insertVector:atIndex:
和类似的方法,以避免insertObject:atIndex:
中出现运行时检查。
其次只需将(b)的额外方法添加到此类中。