gpt4 book ai didi

swift - 使用 Swift 4.0 编译的模块无法在框架二进制文件的 Swift 3.1 中导入

转载 作者:行者123 更新时间:2023-11-28 15:19:46 25 4
gpt4 key购买 nike

我用 xcode 9(swift 版本 3.2)编译了一个框架二进制文件。而且我还想让它与具有 swift 3.2 语​​法的 xcode 8.3.3 一起使用。但是当我尝试使用使用 xcode 9 编译的框架运行项目时,我不断收到 Module compiled with Swift 4.0 cannot be imported in Swift 3.1 错误消息。我应该添加哪个选项才能使这个工作?我知道这是可能的,因为 pod Intercom 在 xcode 8.3.3 和 9 下都可以工作。我会很感激任何建议

最佳答案

出于显而易见的原因,您不能在使用旧版 Swift 的项目中使用使用新版 Swift 编译的模块。使用较新的 Swift 版本编译的框架可能使用较新的 Swift 语法和/或仅在较新的 Swift 版本中可用的 API,因此您将无法从使用较新语法或 API 的框架中调用任何函数。这个问题是由于 Swift 还不是 ABI 稳定的。查看ABI Stability Manifesto有关该主题的更多信息。

Swift 3.2 只是作为 Xcode9 的一部分引入的,目的是使 Swift3->4 的转换更容易。 Xcode8.3.3 仅支持 Swift 3.1,而 Xcode9 仅支持 Swift 3.2 及以上版本,因此您无法将您的框架编译为可用于两个主要 Xcode 版本。

如果您想在框架的二进制版本中同时支持 Xcode8 和 Xcode9,则需要提供使用不同 Swift 编译器版本编译的不同版本。对于使用 Cocoapods/Carthage 的动态框架,您可以使用条件编译 block ,如 #if swift(>=3.2) 来编写与 Swift 编译器的多个版本兼容的代码。有关详细信息,请参阅 The Swift Programming Language (Swift 4) - Version compatibility .

关于swift - 使用 Swift 4.0 编译的模块无法在框架二进制文件的 Swift 3.1 中导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46216663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com