如何为不同版本的Xcode编写条件

时间:2016-04-14 05:36:46

标签: ios xcode swift

我正在处理来自两台不同计算机的应用程序。一个是我的家用机器,它是较旧的MacBook Pro,但具有最新的操作系统并运行Xcode 7.3。我使用的第二台机器是我的工作机器,它是全新的,闪电般快,但仅限于Yosemite和Xcode 7.2.1。

我最近在运行Xcode 7.2.1的计算机上遇到了构建错误,但是应用程序在运行新Xcode的计算机上构建并运行时没有错误。由于IT策略不可靠,我无法升级工作机器,我真的(真的)不希望将我的家用机器降级到Xcode 7.2.1。

所以我想做的是编写一个类似于以下伪代码的条件:

if Xcode.version == 7.3
   // Run this version of the statement
   refreshControl.addTarget(self, action: #selector(ReadingTVC.pullToRefreshTableView), forControlEvents: UIControlEvents.ValueChanged)
if Xcode.version == 7.2.1
   // Run this different version of the statement
   // I still need to figure out how to rewrite the statement for 7.2.1

这可能吗?我在Apple文档中找到了以下内容,但Xcode版本没有选项。只有swift(),os()或arch():

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/doc/uid/TP40014097-CH33-ID539

提前致谢!

3 个答案:

答案 0 :(得分:1)

我目前无法测试它,但我认为7.3和7.2.1也有不同的Swift版本,所以你可以使用swift()。除此之外我假设错误是由于Swift的变化(#selector语法?)所以这个检查无论如何都会更好。

PS:而不是#selector(...)旧版本只需要" pullToRefreshTableView"作为选择者。

答案 1 :(得分:1)

你应该使用swift()来检查swift的版本,因为Xcode 7.3附带Swift 2.2而Xcode 7.2.1附带Swift 2.1.x.

对于您的代码,由于在swift 2.2中引入了swift(),您需要更改在两个版本中都有效的使用代码,如下所示(假设ReadingTVCself):

// For both swift 2.1.x and swift 2.2. In swift 2.2, this will pop a 
// warning and ask you to fix. But you can wait until you work computer
// updated Xcode version to 7.3. You will be force to change when 
// upgrade to swift 3.0 since the old string based api will be removed.
// Currently it is just marked as deprecated.
refreshControl.addTarget(self, action: "pullToRefreshTableView", forControlEvents: UIControlEvents.ValueChanged)

答案 2 :(得分:1)

小小的提示,例如烦人的字符串历史...

        #if swift(>=4.0)
            let len = text.count
        #else
            let len = text.characters.count
        #endif

适用于Xcode 8.0及更高版本(也在Xcode 9 beta中测试)