如何将 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
更类型安全)。
在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
更类型安全)。