iOS: как разрабатывать для разных целей
У меня есть проект XCode с тремя разными целями (скажем, футбол, бейсбол, баскетбол), в результате чего появилось три разных приложения. Большая часть кода одинакова, но иногда она зависит от цели.
Каков наилучший способ реализации методов, специфичных для цели? Я хотел бы избежать
if ([AppDelegate isSoccerTarget] {
...
} else if () {
...
} else if () {
...
}
Я думал об использовании категорий, которые существуют только в одной из трех целей, но тогда я не могу использовать реализацию по умолчанию. И я хотел бы избежать наследования, так как некоторые классы уже находятся в иерархии классов, и я хотел бы сохранить это простым (избегайте person => player, manager, приводящий к soccerPlayer, BasketPlayer и т. Д.).
Как ты это делаешь?
2 ответа
То, как я это делаю, я помещаю все, что похоже в суперкласс, который добавляется ко всем целям, а затем я создаю новый класс (для вашего примера "Player"), который отличается для каждой цели.
Так что в исходном каталоге у меня были бы подкаталоги и файлы:
баскетбол /Player.m бейсбол /Player.m ...
А затем я бы выбрал "Целевое членство" для баскетбола /Player.m в качестве "Баскетбольного".
Таким образом, мне нужно создать экземпляр класса Player только один раз, и в зависимости от того, какая у меня цель, он автоматически создаст соответствующий класс. Надеюсь это поможет.
Вы должны сделать свои цели в панели проекта XCode (файл в самом верху), а затем, на одной из вкладок в каждой цели (я забыл, какая) добавить некоторые значения в макросах препроцессора (может быть макросами предкомпилятора), Затем в своем коде вы можете сделать это: скажем, ваш макрос препроцессора для цели для бейсбола назывался BASEBALL, а soccer - SOCCER. Ваш код будет выглядеть так:
...blablablaothercode...
#ifdef BASEBALL
NSLog(@"Baseball!");
#endif
#ifdef SOCCER
NSLog(@"Soccer!");
#endif
...blablablaothercode...
Их можно использовать везде, где можно использовать обычный код. Думайте об этом как о выражении "switch", которое компилятор может использовать, чтобы увидеть, какой код использовать для каждой цели.