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

Posted

技术标签:

【中文标题】如何将 Objective-C initXXX 方法绑定到具有相同类型参数的 Xamarin.iOS 构造函数?【英文标题】:How to bind Objective-C initXXX method to Xamarin.iOS's constructor, which has same types of arguments? 【发布时间】:2015-04-16 14:04:31 【问题描述】:

在 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 库吗?

谢谢, 哥黑

【问题讨论】:

【参考方案1】:

有几种方法。最简单的方法是(从您的库的文档中)找出NSArray 中使用的类型。

例如如果第一种情况记录为UIImage的数组,而第二种情况记录为NSData的数组

-(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 方法绑定到具有相同类型参数的 Xamarin.iOS 构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C - 给定一个 UINib 实例,我如何初始化我的自定义 UIView?

Objective-C:如何将 NSIndexSet 转换为 NSIndexPath

如何将 Objective-C 的完成块转换为 Swift?

Cocoa 上的 Qt 或 wxWidgets?

如何将 .hour() 和 .minute() 从 Swift 转换为 Objective-C?

如何将此 Objective-C 代码放入按钮操作中?