【问题标题】:Migrating a module written in Swift 3.0 to Swift 2.3?将用 Swift 3.0 编写的模块迁移到 Swift 2.3?
【发布时间】:2017-02-09 23:03:41
【问题描述】:

我目前工作的公司支持用 Swift 2.3 编写的遗留产品(我不同意)。目前他们希望继续推出支持旧版本的功能,因此,我目前正处于一个用 Swift 3.0 编写的 pod 的绑定中。

我试图通过安装 Xcode 7.3.1 将语法转换回 Swift 2.3,以期希望迁移该代码。不幸的是,因为它是一个用 Swift 3.0 编写的模块,所以我的努力​​是徒劳的。

虽然我不反对在 Swift 2.3 的模块中编写代码,但我没有建议,但我知道从长远来看,我将面临一个乏味的过程。我应该采取哪些步骤将使用最新版 Swift 编写的模块迁移回 2.3 版?

【问题讨论】:

  • 您尝试访问的 pod 是否有 Swift 2 的旧版本?例如,我不小心在我正在为其设置依赖项的项目中使用了为 Swift 2.3 设计的旧版本的 Alamofire,我得到了旧版本的 AF,因为我在我的 Podfile 中复制了一些关于该版本的旧代码。我相信如果旧模块存在,您仍然可以访问它。
  • @Pierce 不,它没有。它是用 Swift 3.0 编写的。我尝试寻找有旧版本可用的 pod,但这个 pod 似乎根本没有。我确实确保联系了存储库的贡献者,他们确实提出用 Swift 2.3 编写一个,但我担心这对他们来说可能不是一件可行的事情 + 我真的不希望任何人都能得到它们。我想尝试以最好的方式克服这个障碍,因为它实际上是唯一可以满足我正在从事的项目中的重要要求的可用吊舱。

标签: ios swift module migration cocoapods


【解决方案1】:

首先,您可以使用 Xcode 8 来执行此操作。选择每个方案,然后在构建设置中将“使用旧版 swift 版本”设置为是。编译然后运行。 Swift 将开始出现很多错误。例如这段代码(在 swift 3 中):

SKAction.rotate(byAngle: CGFloat(M_PI_2), duration: 10)

SKAction.rotateByAngle: CGFloat(M_PI_2), duration: 10)

在 swift 2 中。您必须手动修复 swift 所说的所有错误,因此您需要清楚地了解旧的 swift 语法。

【讨论】:

  • 那么您是说我可以将上述内容转移到具有 Swift 3.0 语法的 pod 中,并尝试通过在构建设置中更改旧版本的布尔值来将其迁移到 Swift 2.3 中并继续修复每个单独的错误?这肯定是一个乏味的过程,但值得一试。谢谢!
  • 是的,如果你想支持旧版 swift,你可以这样做
  • 这并不是因为我还在为一些事情而苦苦挣扎。由于 Swift 3 中的某些语法附加组件在 Swift 2.3 中可能无法翻译,因此将我正在处理的这个模块迁移到 Swift 2.3 可能会变得不可能。因此,尽管您的答案可能是正确的,但也可能是间接的。 @paper1111
  • 是的,很遗憾。虽然 Swift 2.2 引入了类似 #if swift(>=2.3) /* this compiles on Xcode 8 / Swift 2.3 / iOS 10 */ #else /* this compiles on Xcode 7 / Swift 2.2 / iOS 9 */ #endif 的东西,但它可以使 swift 2.3 无法使用的功能对使用 swift 3 的人可用,这是一种妥协。见here
猜你喜欢
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多