Я пришел из Java-фона и пытался использовать протокол как интерфейс Java.
В Java вы можете заставить объект реализовать интерфейс и передать его методу, подобному этому:
public interface MyInterface {
void myMethod();
}
public class MyObject implements MyInterface {
void myMethod() {// operations}
}
public class MyFactory {
static void doSomething(MyInterface obj) {
obj.myMethod();
}
}
public void main(String[] args) {
// get instance of MyInterface from a given factory
MyInterface obj = new MyObject();
// call method
MyFactory.doSomething(obj);
}
Мне было интересно, возможно ли сделать то же самое с target-c, может быть, с другим синтаксисом.
Я нашел способ объявить протокол
@protocol MyProtocol
-(NSUInteger)someMethod;
@end
тогда мой объект «примет» этот протокол, и в конкретном методе я мог бы написать:
-(int) add:(NSObject*)object {
if ([object conformsToProtocol:@protocol(MyProtocol)]) {
// I get a warning
[object someMethod];
} else {
// other staff
}
}
Первый вопрос - как убрать предупреждение, но в любом случае другой вызывающий может все же передать неправильный объект классу, поскольку проверка выполняется внутри метода.
Можете ли вы указать другой возможный способ для этого?
спасибо
Leonardo