首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"if (@available(iOS 13.0,*))“不能在Xcode10.3中编译

"if (@available(iOS 13.0,*))“不能在Xcode10.3中编译
EN

Stack Overflow用户
提问于 2019-09-24 23:08:28
回答 1查看 1.6K关注 0票数 2

我有这样的代码:

代码语言:javascript
复制
if (@available(iOS 13.0, *)) {
    if([getMetalDevice() supportsFamily:MTLGPUFamilyApple3])
        pixelFormat = MTLPixelFormatBGRA10_XR;
    else
        pixelFormat =  MTLPixelFormatBGRA8Unorm;
}

它在Xcode11中工作,但在Xcode10.3中不工作。预处理器说它不知道什么是MTLGPUFamilyApple3 (它是在iOS 13中引入的)。

我尝试使用预处理器宏:

代码语言:javascript
复制
#define isIOS13 (floor(NSFoundationVersionNumber) >= NSFoundationVersionNumber_iOS_13_0)  

但是一个预处理器抱怨Function-like macro 'floor' is not defined

同样适用于

代码语言:javascript
复制
#define isIOS13 (int(NSFoundationVersionNumber) >= NSFoundationVersionNumber_iOS_13_0)

出于稳定性的原因,我需要同时使用Xcode10.3( iOS 12.4 )和Xcode11( iOS 13.0 )。

我该怎么做才能让我的代码在两个Xcode中都能工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-24 23:39:59

代码语言:javascript
复制
#ifdef __IPHONE_13_0
if (@available(iOS 13.0, *)) {
    if([getMetalDevice() supportsFamily:MTLGPUFamilyApple3])
        pixelFormat = MTLPixelFormatBGRA10_XR;
    else
#else
{
#endif
        pixelFormat =  MTLPixelFormatBGRA8Unorm;
}

但是,只有在提供了一些支持多个Xcode的开源库时,才应该使用此代码。

如果这是您的项目的一部分,那么您应该迁移到新的Xcode,并且不要使用预处理器操作符使代码过于复杂。

最好用Appium来解决问题,而不是这样。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58083310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档