Объектив Шарпи иногда добавляет меня в @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/

Другие вопросы по тегам