swift知识技巧搜集iOS项目架构

Swift 中预编译(Active Compilation Co

2019-02-14  本文已影响0人  志栋_Fly

Objective-C项目中,用过预处理器宏(Preprocessor Macros)的同学都知道方便所在。

举个栗子:

当我们项目中的http请求域名也就是baseUrl要分为线上环境和开发环境,那怎么进行切换才方便呢,这时候我会把Target中对应的项目右键创建一份副本命名为:XXXDevelop, 原来的那份命名为XXXProduct. Plist再对应设置下,命名清晰后以后就可以明确进行切换了!

1.1

OK,接下来就是使用OC中的预编译宏了:

我将Develop中宏设置为MYSERVICE=0,Product中设置为1进行区分

1.2

这样就能在项目中进行有效判断了:

1.3

是不是很简单快捷,想切换开发环境、生产环境只需选择相应的Target就ok、

以上是简单回顾完OC中使用后,我在新Swift项目中也想按照这个思路进行使用,不过杯具了,虽然之前了解到Swift中没有宏定义的概念,但还好 #if 这一套编译还能用,但 #if 后面进行等式判断貌似不好使了,试不出来只能好好查下资料了:

1.在之前OC时代(编译器是clang),条件编译所用到的变量定义,都是通过:GCC_PREPROCESSOR_DEFINITIONS的Preprocessor Macros去定义的;

2.后来swift中(编译器是swiftc),最开始时是用:OTHER_SWIFT_FLAGS的Other Swift Flags中定义的(加上-DXXX)

3.Xcode 8中又更新为,换用SWIFT_ACTIVE_COMPILATION_CONDITIONS的Active Compilation Conditions去定义变量XXX即可(不需要加-D)。

难怪!!有很多之前文章-DXXX之类的,并且也只是设置为0或1进行判断,如果还有预发布环境Url呢?或者有很多值的判断呢?

有了3的说法,就不需要多纠结,直接Build Settings中直接查找"Active Compilation Condition" 设置字符串就好了,避免掉设置数值。

1.4 开发环境的设置 1.5 生产环境的设置

并且也不需要更改"Other Swift Flags"中的任何设置~

1.6

最后只要在你的Swift 文件中进行判断就OK了!

上一篇下一篇

猜你喜欢

热点阅读