Я использую sharpie
bind
команды, чтобы получить интерфейсы API для моей iOS
библиотеки для xamarin
Находчивого связывание Objective-C @protocols вопрос
sharpie bind --namespace=XXX --sdk=iphoneos9.2 Headers/*.h
Есть проблемы с @protocol
привязок:
The type or namespace name `IProfileDelegate' could not be found. Are you missing an assembly reference?
Это как это генерируется:
interface XLibrary : IProfileDelegate
{
[Wrap ("WeakProfileDelegate")]
[NullAllowed]
MB_ProfileDelegate ProfileDelegate { get; set; }
Я понимаю, что он создает пустой ProfileDelegate
, затем компилятор или что-то заполняет его методами. Но моя проблема в том, что IProfileDelegate
не найден.
@protocol ProfileDelegate <NSObject>
@required
- (void)GetProfileFinished:(NSString*)_data;
- (void)SetProfileFinished:(NSString*)_data;
@end
Разница здесь в I
символ (который зарезервирован для @protocols я думаю). Как сделать sharpie
генерировать правильные определения api?
Я могу удалить все префиксы I
, и он компилируется успешно, но я бы предпочел исправить это, чтобы не повторять это каждый раз, когда мне нужно обновлять исходную библиотеку.
Благодаря
Почему мы должны установить базовый тип? – awattar
@awattar, потому что его класс ProfileDelegate obj-c имеет NSObject в качестве базового класса (at) protocol ProfileDelegate –
Но когда протокол не использует NSObject? http://stackoverflow.com/q/43126822/1142979 – awattar