在 Objective-C 中,有时会有多个具有相同类型参数的 initXXX 方法。 例如,
-(id)initWithImageArray:(NSArray *)images;
-(id)initWithPNGorJPEGDataArray:(NSArray *)data;
如果我们准备通过 Objective Sharpie 将其绑定(bind)到 Xamarin.iOS,操作系统会创建这样的模板:
// -(id)initWithImageArray:(NSArray *)images;
[Export ("initWithImageArray:")]
IntPtr Constructor (NSObject [] images);
// -(id)initWithPNGorJPEGDataArray:(NSArray *)data;
[Export ("initWithPNGorJPEGDataArray:")]
IntPtr Constructor (NSObject [] data);
但是这些c#接口(interface)是相同的,所以无法编译成功。
是否有绑定(bind)此类 Objective-C 库的策略?
谢谢, 浩平
最佳答案
有几种方法。最简单的方法是(从库的文档中)找出 NSArray
中使用的类型。
例如如果第一种情况被记录为 UIImage
数组,而第二种被记录为 NSData
数组
-(id)initWithImageArray:(NSArray *)images; // array of UIImage
-(id)initWithPNGorJPEGDataArray:(NSArray *)data; // array of NSData
然后就可以绑定(bind)为
IntPtr Constructor (UIImage [] images);
IntPtr Constructor (NSData [] data);
这将为两个构造函数提供不同的签名,正确编译并进行更好的绑定(bind)(因为它比使用 NSObject
类型更安全)。
关于c# - 如何将 Objective-C initXXX 方法绑定(bind)到 Xamarin.iOS 的具有相同类型参数的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28535032/