【问题标题】:Swift to C# convert?Swift 到 C# 的转换?
【发布时间】:2018-01-05 14:21:06
【问题描述】:

我正在尝试将 Swift 代码解释为 C# 代码。但是最后两行失败了。

斯威夫特:

override func viewDidLoad() {
  let registry = Registry(queue: nil)
  registry.delegate = self
  registry.desiredType = [desiredType.IP]
}

C#:

public override void ViewDidLoad() {
  base.ViewDidLoad();

  Registry registry = new Registry(null);
  registry.Delegate = this;
  registry.desiredType = desiredType.IP;

}

错误:

ViewController.cs(23,23):错误 CS0266:无法隐式转换类型 'ViewController' 到 'IRegistryDelegate'。存在显式转换 (你错过了演员吗?)(CS0266)

ViewController.cs(31,31):错误 CS0029:无法隐式转换类型 'Foundation.NSString' 到 'Foundation.NSSet' (CS0029)

【问题讨论】:

  • thisIRegistryDelegate 吗?第二个错误超出了您显示的代码。
  • [desiredType.IP] 这是一个数组/集合。并且错误说desiredType.IP 是一个NSString (Foundation.NSString) 而不是NSSet.. 另外,您是否使您的ViewController 符合IRegistryDelegate

标签: c# ios swift xamarin xamarin.ios


【解决方案1】:

ViewController.cs(23,23):错误 CS0266:无法将类型“ViewController”隐式转换为“IRegistryDelegate”。存在显式转换(您是否缺少演员表?)(CS0266)

就像我们在 Swift 中写的那样,ViewController 应该继承接口(iOS 中的协议)并将其分配给Delegate,然后覆盖委托方法,不要忘记使用Export 属性。

public partial class ViewController1 : UIViewController ,IRegistryDelegate
{}

[Export("AAA:")]
public void AAA(object obj)
{
    ...
}

ViewController.cs(31,31):错误 CS0029:无法将类型“Foundation.NSString”隐式转换为“Foundation.NSSet”(CS0029)

desiredType.IP 是这里的字符串,它与[desiredType.IP] 不匹配(它是 NSSet),您应该使用NSSet 来代替包含该字符串。

registry.desiredType = new NSSet(new string[] {desiredType.IP});;

【讨论】:

  • 你知识渊博。没有一个人能回答我的问题,但你确实做到了。欣赏它
猜你喜欢
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多