如何将 StrongDelegate ObjC 代码移植到 C# MonoTouch?



我正在将官方的Apple Multipeer WiTap示例移植到Xamarin和C#,但是我不确定如何在TapViewController中移植此方法。

它包含我不确定如何移植的所有内容...即

  1. 仅在代码中表示的委托,并且在 Xamarin 框架中没有强委托。(这可能很容易,只是我缺少的一个概念)
  2. 这里的id到底是什么,我该如何声明/使用它?
  3. 如何声明self.delegate;

法典:

- (IBAction)closeButtonAction:(id)sender
{
id <TapViewControllerDelegate>  strongDelegate;
#pragma unused(sender)
strongDelegate = self.delegate;
if ([strongDelegate respondsToSelector:@selector(tapViewControllerDidClose:)]) {
[strongDelegate tapViewControllerDidClose:self];
}
}

这是指向我的代码的链接,其中端口正在进行中

您是否试图在不知道前者的情况下将 Objective-C 代码移植到 C#?

  • id是 Obj-C 的"任何对象",而id<protocolName>是实现指定协议的任何对象。Obj-C"委托"只是一个实现给定协议的对象,正是它的使用方式使其成为委托。Objc-C 协议和 C# 接口是匹配的概念。因此,strongDelegate是一个变量,其类型是 C# 接口(您可能已从 Obj-C 协议翻译而来)。
  • 声明self.delegate:它是一个 Objc-C 属性引用,与strongDelegate具有相同(或兼容)的类型。C# 具有属性。
  • Obj-C 中if测试是确定引用的对象是否实现指定的方法,如果是,则调用它。Obj-C 协议允许可选方法,即实现协议的对象不需要实现的方法。C# 接口没有直接等效项。在将 Obj-C 协议转换为 C# 接口时,您要么将所有可选方法设置为非可选方法,要么执行其他操作。翻译if以匹配您所做的任何操作。

呵呵

最新更新