如何在Swift中有条件地编译tvOS

时间:2016-02-04 13:10:42

标签: ios swift tvos

如何在Swift语言的同一文件中有条件地编译iOS和tvOS的代码? 我已经尝试了所有针对#if的Objective-C样式TARGET_OS_TV等,如Apple文档中所述,以及其他一些答案。但我还没有为Swift代码找到一个可行的解决方案。

4 个答案:

答案 0 :(得分:20)

#if os(OSX)
// compiles for OS X
#elseif os(iOS)
// compiles for iOS
#elseif os(tvOS)
// compiles for TV OS
#elseif os(watchOS)
// compiles for Apple watch
#endif

答案 1 :(得分:4)

#if <build configuration> && !<build configuration>
statements
#elseif <build configuration>
statements
#else
statements
#endif

构建配置可以是: -
os(abc)其中abc的有效值是OSX,iOS,watchOS,tvOS,Linux
arch(abc),其中abc的有效值是x86_64,arm,arm64,i386

请参阅Apple文档here

答案 2 :(得分:3)

我没有文档参考 - 虽然我想要一个 - 但我看过Apple样本代码的部分如下:

    #if os(iOS) || os(tvOS)
    #endif

答案 3 :(得分:1)

Apple也将其涵盖在标题Targeting Apple TV in Your Apps

  

在Objective-C中列出1-1 tvOS的条件化代码

 #if TARGET_OS_TV
     NSLog(@"Code compiled only when building for tvOS.");
 #endif
  

在Swift中列出1-2 tvOS的条件化代码

#if os(tvOS)
NSLog(@"Code compiled only when building for tvOS.");
#endif

if #available(tvOS 9.1,*) {
    print("Code that executes only on tvOS 9.1 or later.")
}