我是porting Xamarin和C#的Official Apple Multipeer WiTap sample,但我不确定如何在TapViewController中移植此方法。
它包含了我不确定如何移植的所有东西......即
id
到底是什么,我该如何宣布/使用它?self.delegate;
代码:
- (IBAction)closeButtonAction:(id)sender
{
id <TapViewControllerDelegate> strongDelegate;
#pragma unused(sender)
strongDelegate = self.delegate;
if ([strongDelegate respondsToSelector:@selector(tapViewControllerDidClose:)]) {
[strongDelegate tapViewControllerDidClose:self];
}
}
答案 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#有属性。if
测试确定引用的对象是否实现了指定的方法,如果是,则调用它。 Obj-C协议允许可选方法,即实现协议的方法对象不需要实现。 C#接口没有直接的等价物。在将Obj-C协议转换为C#接口时,您要么使所有可选方法都是非可选的,要么您做了其他事情。翻译if
以匹配您所做的任何事情。HTH