我可以在 Swift 3 项目中使用 Swift 2.3 框架吗?

Posted

技术标签:

【中文标题】我可以在 Swift 3 项目中使用 Swift 2.3 框架吗?【英文标题】:Can I use Swift 2.3 frameworks in a Swift 3 project? 【发布时间】:2016-09-30 22:32:42 【问题描述】:

在我的项目中,我将所有私有 swift 2.3 文件迁移到 swift 3。我想使用我用 swift 2.3 编写的遗留框架,直到它们有 swift 3 版本。

我尝试添加“使用旧版 Swift 版本 = 是”。清除/构建我的项目,但我仍然遇到一些麻烦,xCode 要求我将我的框架迁移到 swift 3(这是不可能的,因为它们是库)......

如何继续使用我的 2.3 库?

【问题讨论】:

您不能将 swift 2.3 与 swift 3 混合使用。至少现在还不能。 那么我该怎么做才能继续开发我的项目呢? 我猜你可以继续在整个项目中使用 swift 2.3,直到更新这些框架。 许多框架同时提供 Swift 2 和 3 版本,但并不总是很明显。您可能想检查相关库是否有 Swift 3 分支。但是,正如 Sam 所说,如果有问题的库之一尚未提供 Swift 3 版本,您可以将项目保留在 Swift 2.3 中。 您只使用您提到的“使用旧版 Swift 版本”功能,如果它要求您转换任何内容,请拒绝。 【参考方案1】:

你可以试试这个:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '2.3'
    end
  end
end

请注意,这会将您的所有目标设置为 swift 2.3。如果你想要一个特定的,你可以这样做:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.pod_name == 'DesiredPod'
      target.build_configurations.each do |config|
        config.build_settings['SWIFT_VERSION'] = '2.3'
      end
    end
  end
end

【讨论】:

我在 target.pod_name 上遇到错误,但 target.name 有效【参考方案2】:

您可以将Build Settings->Swift Compiler - Version-> Use Legacy Swift Language Version设置为Yes

【讨论】:

以上是关于我可以在 Swift 3 项目中使用 Swift 2.3 框架吗?的主要内容,如果未能解决你的问题,请参考以下文章

从 Swift 3 中的另一个项目访问视图控制器

iOS 10,Swift 3 - 更改非活动栏项目图标?

从Swift 3.2迁移到Swift 4我使用autosavesInPlace收到错误

Alamofire swift 库版本 4.4 未安装在 swift 3.0.2 项目中

Swift 3 - 从 plist 的所有数组中获取所有项目

使用 Swift 3.0.1 编译的模块无法在 BuddyBuild 上的 Swift 3.0 中导入