ma1*_*w28 9 conditional-compilation buildconfiguration deployment-target ios swift
如何在Swift条件编译语句中检查iOS部署目标?
我尝试过以下方法:
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0
// some code here
#else
// other code here
#endif
Run Code Online (Sandbox Code Playgroud)
但是,第一个表达式导致编译错误:
Expected '&&' or '||' expression
Run Code Online (Sandbox Code Playgroud)
Vin*_*rci 11
TL; DR?>转到3.解决方案
Swift编译器不包含预处理器.相反,它利用编译时属性,构建配置和语言功能来实现相同的功能.因此,预处理程序指令不会在Swift中导入.
这就是为什么在尝试使用__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0哪个是C预处理指令时出错.有了swift,你就不能使用#if像<.你所能做的就是:
#if [build configuration]
Run Code Online (Sandbox Code Playgroud)
或条件:
#if [build configuration] && ![build configuration]
Run Code Online (Sandbox Code Playgroud)
再次来自相同的文档:
构建配置包括文字真值和假值,命令行标志以及下表中列出的平台测试功能.您可以使用-D <#flag#>指定命令行标志.
true并且false:不会帮助我们os(iOS)或者arch(arm64)>不会帮助你,搜索一下,无法确定它们的定义位置.(在编译器本身可能?)感觉有点像解决方法,但做的工作:

现在,例如,您可以使用#if iOSVersionMinRequired7而不是__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_7_0假设您的目标是iOS7.
这基本上与在项目中更改iOS部署目标版本相同,只是不太方便......当然,您可以使用相关方案的多个构建配置,具体取决于您的iOS版本目标.
苹果肯定会改进这个,也许有一些内置的功能,如os()......
在Swift 2.2中测试过
说Deployment Target你的意思iOS version,还是App Target?下面我提供解决方案,如果你有多个版本的应用程序(免费应用程序,付费应用程序,...),以便您使用不同的应用程序目标.
您可以设置自定义构建配置:
1.转到您的项目/选择目标/构建设置/搜索自定义标志
2.对于您选择的目标,使用-D前缀(不带空格)为Debug和Release
3 设置自定义标志.为您拥有的每个目标执行上述步骤
要区分目标,您可以执行以下操作:
var target: String {
var _target = ""
#if BANANA
_target = "Banana"
#elseif MELONA
_target = "Melona"
#else
_target = "Kiwi"
#endif
return _target
}
override func viewDidLoad() {
super.viewDidLoad()
print("Hello, this is target: \(target)"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10050 次 |
| 最近记录: |