我正在为 MKPolygon 类创建一个类别。您可以在此处找到对此类的参考。我有两个要“公开”的公共类方法和一些“私有”方法来处理一些内部。我想这样做的原因是,如您所见,该类可用的方法是类方法,我想通过提供将返回的类方法(MKPolygon *)继续与此保持一致。此外,我将编写大量工作,而不分解任务将违背良好的编码实践,当然也难以测试和阅读——这尤其重要,因为我将把它贡献给 github。
这是我在 XCode 中创建新类别时创建的头文件和实现文件。我现在要使这些方法通用,以表达我的观点:
MKPolygon+MKPolygonStuff.h
#import <MapKit/MapKit.h>
@interface MKPolygon (MKPolygonStuff){
}
+(MKPolygon *)polygon:(MKPolygon *)poly1 doStuff:(MKPolygon *)poly2 onMap:(MKMapView *)map;
+(BOOL)polygon:(MKPolygon *)poly1 doesThisThing:(MKPolygon *)poly2;
@end
MKPolygon+MKPolygonStuff.m
@interface MKPolygon(){
}
+(void)calculateStuff;
@end
@implementation MKPolygon (MKPolygonStuff)
+(void)calculateStuff{
}
+(MKPolygon *)polygon:(MKPolygon *)poly1 doStuff:(MKPolygon *)poly2 onMap:(MKMapView *)map{
//do stuff and call other class methods to break up tasks
//[self calculateStuff];
}
+(BOOL)polygon:(MKPolygon *)poly1 doesThisThing:(MKPolygon *)poly2{
//returns boolean
//possibly call other class methods do some internals.
}
在我的实现文件中,我的界面在括号内有一些东西,但它给了我以下警告:
“界面上的类别重复定义......”
因此,我决定在这里阅读有关此问题的其他几个线程后,将括号留空。这样做也可以让我拥有我最肯定需要的、我不想被“公开”的实例变量。
现在我有一个警告,它位于 +(void)calculateStuff 旁边的实现部分下。
“类别正在实现一种方法,该方法也将由其主要类实现”。
我在网上搜索了这个警告,看看是什么导致了这个警告,如果编译器认识到你将覆盖类的一些内置功能,你似乎会收到这个警告。问题是,MKPolygon 类中没有 calculateStuff 方法,所以我不确定为什么会收到此警告。这里有什么我做错了,如果有的话,一般来说,我是否在这里设置了我想做的所有事情?显然,我的私有方法也必须是类方法,因为您不能从类方法中调用实例方法。
在此不胜感激任何评论/建议/更正。