我正在处理来自两台不同计算机的应用程序。一个是我的家用机器,它是较旧的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():
提前致谢!
答案 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()
,您需要更改在两个版本中都有效的使用代码,如下所示(假设ReadingTVC
为self
):
// 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中测试)