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

时间:2017-05-17 21:03:58

标签: c# objective-c xamarin.ios multipeer-connectivity objective-c-2.0

我是porting Xamarin和C#的Official Apple Multipeer WiTap sample,但我不确定如何在TapViewController中移植此方法。

它包含了我不确定如何移植的所有东西......即

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

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

    这是link to my code,其中端口is in progress

1 个答案:

答案 0 :(得分:1)

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

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

HTH