Я нахожусь в процессе создания категории для класса 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, поэтому я не уверен, почему я получаю это предупреждение. Есть ли что-то здесь, что я делаю неправильно, если что, и вообще, все ли у меня настроено прямо здесь с тем, что я хочу сделать? Очевидно, что мои частные методы также должны быть методами класса, поскольку вы не можете вызывать методы экземпляра из методов класса.
Буду признателен за любые комментарии/предложения/исправления здесь.