如何将 Objective-C initXXX 方法绑定到具有相同类型参数的 Xamarin.iOS 的构造函数?

How to bind Objective-C initXXX method to Xamarin.iOS's constructor, which has same types of arguments?

在Objective-C中,有时会有多个具有相同类型参数的initXXX方法。 例如,

    -(id)initWithImageArray:(NSArray *)images;

    -(id)initWithPNGorJPEGDataArray:(NSArray *)data;

如果我们准备通过 Objective Sharpie 将它绑定到 Xamarin.iOS,OS 会创建这样的模板:

    // -(id)initWithImageArray:(NSArray *)images;
    [Export ("initWithImageArray:")]
    IntPtr Constructor (NSObject [] images);

    // -(id)initWithPNGorJPEGDataArray:(NSArray *)data;
    [Export ("initWithPNGorJPEGDataArray:")]
    IntPtr Constructor (NSObject [] data);

但是这些c#接口都是一样的,所以编译不成功

是否有绑定此类 Objective-C 库的策略?

谢谢, 小黑

有几种方法。最简单的方法是(从您的库的文档中)弄清楚 NSArray.

中使用的类型是什么

例如if 第一种情况记录为 UIImage 的数组,第二种情况 was 记录为 NSData[ 的数组=16=]

-(id)initWithImageArray:(NSArray *)images; // array of UIImage
-(id)initWithPNGorJPEGDataArray:(NSArray *)data; // array of NSData

那么可以绑定为

IntPtr Constructor (UIImage [] images);

IntPtr Constructor (NSData [] data);

这将为两个构造函数提供不同的签名,正确编译并进行更好的绑定(因为它比使用 NSObject 更类型安全)。