【发布时间】:2016-04-18 15:51:09
【问题描述】:
在 Xamarin 中使用委托模式的正确方法是什么?
在 API 定义(由 sharpie 生成)中,我将协议映射到 Interface SomeDelegate:
// @protocol SomeDelegate <NSObject>
[Protocol, Model]
[BaseType (typeof(NSObject))]
interface SomeDelegate
{
// @required -(void)someMethod;
[Abstract]
[Export ("someMethod")]
void SomeMethod;
...
我已经这样声明了视图控制器:
public partial class ViewController : UIViewController
但我不能让视图控制器像这样实现我的协议:(不能有多个基类)
public partial class ViewController : UIViewController, SomeDelegate
我可以在一些额外的类上实现这个delegate:
public ViewControllerDelegate : SomeDelegate
并使用这个类作为委托,但这对我来说不是很方便。
我最近发现通过添加“我”:
public partial class ViewController : UIViewController, ISomeDelegate
我通过(我假设)明确表示编译器这是接口(协议)而不是基类来避免出现“多个基类错误”。
现在我需要将委托作为方法的参数传递,并且出现编译错误 - 无法将 SomeDelegate 类型转换为 SomeDelegate
有没有办法在UIViewController(随便)等一些类中实现delegates?
【问题讨论】:
-
我需要这样的东西stackoverflow.com/questions/21821003/… 但它不起作用
-
确保 ISomeDelegate 是一个接口。然后看起来你可能有某种命名空间冲突,其中 SameDelagate 在不同的命名空间中定义,因此不兼容
-
绑定项目会将接口前缀“I”添加到任何具有属性 [Model, Protocol] 的接口。问题是您不能在绑定库中定义任何 ISomeDelegate 类型的属性。您确定定义该方法的类中没有 WeakDelegate/Delegate 属性吗?这是您自己的图书馆还是第 3 方?可以发一下标题吗?
标签: xamarin.ios objective-sharpie xamarin.ios-binding