Объектив Шарпи иногда добавляет меня в @protocols
Я пытаюсь связать библиотеку, и я столкнулся с этой проблемой:
// @interface PTPusher : NSObject <PTPusherConnectionDelegate, PTPusherEventBindings>
[BaseType(typeof(NSObject))]
interface PTPusher : IPTPusherConnectionDelegate, IPTPusherEventBindings
IPTPusherConnectionDelegate
а также IPTPusherEventBindings
не может быть найден, но их неизменное имя существует:
// @protocol PTPusherConnectionDelegate <NSObject>
[Protocol, Model]
[BaseType(typeof(NSObject))]
interface PTPusherConnectionDelegate
Почему Objective Sharpie добавляет I
в списке унаследованных интерфейсов, но не в самом имени интерфейса?
Что я должен изменить, чтобы это исправить? Добавить I к имени интерфейса или удалить I из списка унаследованных интерфейсов? Или я могу это исправить, не меняя их, а просто добавляя или удаляя атрибуты этих классов / интерфейсов?
1 ответ
Начиная с MonoTouch 7.0, была добавлена новая и улучшенная функциональность привязки протокола. Любое определение, которое содержит атрибут [Protocol], фактически генерирует три вспомогательных класса, которые значительно улучшают способ использования протоколов:
// Full method implementation, contains all methods
class MyProtocol : IMyProtocol {
public void Say (string msg);
public void Listen (string msg);
}
// Interface that contains only the required methods
interface IMyProtocol: INativeObject, IDisposable {
[Export ("say:”)]
void Say (string msg);
}
// Extension methods
static class IMyProtocol_Extensions {
public static void Optional (this IMyProtocol this, string msg);
}
}
Также,
Если вы хотите использовать определения протоколов в вашем API, вам нужно будет написать скелетные пустые интерфейсы в вашем определении API. Если вы хотите использовать MyProtocol в API, вам нужно сделать это:
[BaseType (typeof (NSObject))]
[Model, Protocol]
interface MyProtocol {
// Use [Abstract] when the method is defined in the @required section
// of the protocol definition in Objective-C
[Abstract]
[Export ("say:")]
void Say (string msg);
[Export ("listen")]
void Listen ();
}
interface IMyProtocol {}
[BaseType (typeof(NSObject))]
interface MyTool {
[Export ("getProtocol")]
IMyProtocol GetProtocol ();
}
Источник: https://developer.xamarin.com/guides/cross-platform/macios/binding/binding-types-reference/