Объектив Sharpie иногда добавляет I к @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 из списка унаследованных интерфейсов? Или я могу исправить это, не меняя их, а просто добавляя или удаляя атрибуты этих классов/интерфейсов?


person vrwim    schedule 27.10.2016    source источник
comment
Не дубликат: stackoverflow.com/questions/ 36448006/ Это не отвечает на мои вопросы. Он говорит мне, что я могу удалить I, но мне нужна подробная информация о том, что генерирует Objective Sharpie и как я должен решить эту проблему.   -  person vrwim    schedule 27.10.2016
comment
Ответ найден на странице developer.xamarin.com. /guides/кроссплатформенный/macios/binding/   -  person vrwim    schedule 27.10.2016


Ответы (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/#Protocols

person vrwim    schedule 27.10.2016