我正在尝试绑定一个库,我遇到了这个问题:
// @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?或者我可以在不改变这些的情况下解决这个问题,只需在这些类/接口中添加或删除属性吗?
答案 0 :(得分:2)
从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定义中编写框架空接口。如果要在API中使用MyProtocol,则需要执行以下操作:
[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 ();
}