gpt4 book ai didi

c# - Xamarin:绑定(bind)返回协议(protocol)的 objective-c 协议(protocol)

转载 作者:可可西里 更新时间:2023-11-01 05:40:38 25 4
gpt4 key购买 nike

我的应用程序中有以下 2 个协议(protocol):

@protocol DisplayItem<NSObject>

- (void) itemSelected:(NSString*) itemId;

@end

@protocol DisplayerFactory <NSObject>

- (UIViewController<DisplayItem>*) createItemDisplayer;

@end

我使用 Objective Sharpie 来绑定(bind)它们,我得到了以下绑定(bind):

// @protocol DisplayItem <NSObject>
[Protocol, Model]
[BaseType(typeof(NSObject))]
interface DisplayItem
{
// @required -(void)itemSelected:(NSString *)itemId;
[Abstract]
[Export("itemSelected:")]
void ItemSelected(string itemId);
}

// @protocol DisplayerFactory <NSObject>
[Protocol, Model]
[BaseType(typeof(NSObject))]
interface DisplayerFactory
{
// @required -(UIViewController<DisplayItem> *)createItemDisplayer;
[Abstract]
[Export("createItemDisplayer")]
DisplayItem CreateItemDisplayer();
}

这看起来很合理。除了现在当我尝试实现 DisplayerFactory 时,CreateItemDisplayer 方法需要返回一个 DisplayItem 和一个 UIViewController。由于 DisplayItem 是作为一个类实现的,并且我们不能在 C# 中进行多重继承,所以我不能有一个同时从 UIViewControllerDisplayItem< 继承的类.

我尝试使用 IDisplayItem 如下:

public class MyController : UIViewController, IDisplayItem
{
// ...
}

public DisplayItem CreateItemDisplayer()
{
return new MyController();
}

但是编译失败,因为 MyController 不是 DisplayItem。如果我将方法类型更改为 IDisplayItem,它将无法编译,因为我没有正确实现 IDisplayerFactory 接口(interface)(或覆盖 DisplayerFactory)。

我该如何解决这个问题,以便我可以返回一个实现该协议(protocol)的 UIViewController

最佳答案

像这样绑定(bind)它:

interface IDisplayItem {}

// @protocol DisplayerFactory <NSObject>
[Protocol, Model]
[BaseType(typeof(NSObject))]
interface DisplayerFactory
{
// @required -(UIViewController<DisplayItem> *)createItemDisplayer;
[Abstract]
[Export("createItemDisplayer")]
IDisplayItem CreateItemDisplayer();
}

现在这段代码可以工作了,因为 CreateItemDisplayer 返回一个接口(interface):

public class MyController : UIViewController, IDisplayItem
{
// ...
}

public IDisplayItem CreateItemDisplayer()
{
return new MyController();
}

关于c# - Xamarin:绑定(bind)返回协议(protocol)的 objective-c 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31737154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com