2013-06-17 6 views
0

В случае, когда два класса, которые имеют разные иерархии классов, но которым необходимо разделить какой-то код, каков наилучший подход в ObjectiveC? В ActionScript, вы можете сделать:Объективный эквивалент C для оператора включения ActionScript

class A : B{ 
include "commoncode.as" 
} 
class C : D{ 
include "commoncode.as" 
} 

И тогда вы положили общий код в commoncode.as

Edit: Вот что ActionScript включают заявление делает: «Во время компиляции компилятор копирует все содержимое файла в ваш класс, как если бы вы его набрали ».

+1

Вы можете сделать это в C тоже (и, в дополнение, Objective C). Однако это плохая идея. Не можете ли вы поместить общий код в функцию? – Dave

+0

Не уверен, что я понимаю - commoncode.as содержит кучу функций. Это не компиляционная единица, а только что-то, что вставлено во время предварительной компиляции. – user2453876

+0

Вы должны более точно описать, что делает ActionScript. В противном случае трудно найти подходящую концепцию для ваших целей в Objective-C. –

ответ

0

В AS3 у вас есть возможность использовать« интерфейс », чтобы соответствовать классу определенного набора методов. В Objective-C у вас есть «протоколы», которые по существу выполняют одни и те же цели. Однако это позволит вам определять необходимые (или необязательные) методы, а не выполнять их. Реализация все равно будет происходить в самом классе.

Если у вас есть класс (называемый CommonCode), который имеет только вспомогательные методы, вы можете просто включить заголовочный файл в класс, который должен использовать методы. Например, MathUtils класса может выглядеть следующим образом:

MathUtils.h

CGFloat distance(CGPoint point1,CGPoint point2); 

MathUtils.m

CGFloat distance(CGPoint point1,CGPoint point2) { 
    CGFloat dx = point2.x - point1.x; 
    CGFloat dy = point2.y - point1.y; 
    return sqrt(dx*dx + dy*dy); 
}; 

Когда включен в класс, вы бы затем можно вызвать этот метод:

CGFloat dist = distance(myPoint1, myPoint2); 

Следует отметить, что это функции стиля C, а не Objective-C. Но вы можете легко сделать класс MathUtils статическим, используя методы класса, а не методы экземпляра.

Смежные вопросы