条件编译似乎在Xamarin Studio中不起作用

时间:2017-04-26 15:22:03

标签: xamarin xamarin.ios xamarin.forms conditional-compilation

我创建了一个Xamarin Forms应用程序。 在一个名为" MyLabel"的标签的新页面中。 在我的页面背后的代码我有

private void SetUpUI()
{
    #if __IOS__
    this.MyLabel.BackgroundColor = Color.Navy;
    #endif
}

在我的iOS项目选项中,我可以在"编译器"中找到符号__IOS__。标签。 (请看截图)

enter image description here

当我在iOS中运行时,它不会使标签变为蓝色:

但如果我删除#if __IOS__阻止,则会将标签设为蓝色:

所以似乎条件编译不起作用。 我在Mac上。因此无法在Visual Studio上进行测试。 坚持了很长时间,但无法弄清楚我错过了什么。

2 个答案:

答案 0 :(得分:3)

SushiHangover的答案是正确的:您的 PCL项目将没有平台的编译器定义。

但是,自从Xamarin Forms 2.3.4发布以来,他提供的解决方案已经过时了。 Device.OnPlatform已按this discussion中所述进行了重新设计,并在this Pull Request中实施。

在Xamarin Forms 2.3.4及更高版本中执行此操作的正确方法是使用if let data = try? Data(contentsOf: fileURL) { let json = JSON(data: data) } 。使用开关或条件符合您的需求,如下:

Device.RuntimePlatform

如果你使用共享项目而不是PCL,就可以像你问的那样去做。因为当您使用共享项目时,您可以访问平台项目的编译器指令。

答案 1 :(得分:2)

您正在 PCL项目中使用不包含这些编译器定义的条件,因此您的条件代码灰色的原因。

在您的PCL项目中,您可以使用Device.OnPlatform执行基于平台的处理:

Device.OnPlatform (iOS: () => this.MyLabel.BackgroundColor = Color.Navy; );

re:https://developer.xamarin.com/api/member/Xamarin.Forms.Device.OnPlatform/