Obj-C 到 Swift 的转换(包括 Cocoapods)

Posted

技术标签:

【中文标题】Obj-C 到 Swift 的转换(包括 Cocoapods)【英文标题】:Obj-C to Swift conversion (inc. Cocoapods) 【发布时间】:2020-09-06 14:01:24 【问题描述】:

从一个 Objective-C 和 Swift 混合项目开始...

我逐渐将所有代码转换为 Swift。对此非常高兴。

我现在将注意力转向所有 Cocoapod 依赖项,所有明显的依赖项都已被删除或替换为 Swift 等效项...

但是,我使用的是 Google Firebase Cocoapods (Objective-C),找不到 Swift 替代方案。 (我正在使用 Firebase 进行应用分析并帮助推送通知) 我在这里错过了一个技巧吗? 100% Swift 的 Firebase 有什么好的替代品吗?

我知道有些人可能会建议我将 Firebase 保留在 Obj-C 中,但我的想法是,如果我可以 100% 将我的项目转换为 Swift,我将在未来几年内对其进行验证。

【问题讨论】:

“Swift 替代方案”是什么意思?可以从 Swift 使用 Objective-C SDK,所以我不确定您的目标是什么——您是否关心您使用的第三方框架是否在 Swift 内部实现?你关心 API 的“敏捷性”吗? Swift 替代方案,就像在 Cocoapod 依赖项中一样,它与当前 (Firebase) 的工作几乎相同,但所有代码都是用 Swift 编写的。没有 Obj-C。 我还是不明白你的动机:你使用的库是用 Obj-C 还是 Swift 实现的,只要你能从 Swift 中使用它,这有什么关系? 【参考方案1】:

Firebase 没有纯 Swift SDK。我认为 Google 对 ios 依赖关系不够关心。

此外,从技术上讲,如果您希望更改证明 iOS 代码,ObjC 会“更好”,因为与 Swift 不同,它没有版本控制。 但!我不推荐任何人使用 ObjC 编写项目,因为它可能需要更少的代码维护。

【讨论】:

这是有道理的。我明白你在说什么。只是……我有一种感觉 Obj-C 最终会过时并且不会被 Appstore 的上传所接受。我这么说只是因为苹果就是这么做的。他们推广新技术(html5、USB-C、Thunderbolt),并且避开旧技术(Flash、耳机插孔等)。你可能认为我错了,但我更喜欢让我的代码库 100% Swift 包括所有 cocoapod 依赖项。 别误会我的意思,我 100% 同意你对 Swift 的看法。我过去曾与 ObjC 合作过,并且更愿意避免使用它。但遗憾的是,即使在 5 年内,ObjC 也不会去任何地方,因为 Apple 的大部分 API 仍然是用 ObjC 编写的,而且从 Swift 2 开始,我并没有注意到太多的变化。【参考方案2】:

在 iOS 14 中使用 Firebase pod 时,我遇到了同样的问题。我最终发现问题仅来自一般的“Firebase”吊舱。

基本上,不要使用:

pod 'Firebase'

并改用特定的 pod:

pod 'Firebase/Auth'
pod 'FirebaseCore'
pod 'Firebase/Firestore'
pod 'FirebaseFirestoreSwift'
pod 'Firebase/Storage'
pod 'Firebase/Analytics'
pod 'Firebase/DynamicLinks'

将框架导入文件时,请导入特定的 pod。 (即“导入 FirebaseCore”而不是“导入 Firebase”)。我假设 Google 最终会更新通用 pod 以兼容。

【讨论】:

可以使用pod 'Firebase'。 6.31.1 版本中修复了一个错误。见github.com/firebase/firebase-ios-sdk/issues/6341 哦,这是个好消息。干杯

以上是关于Obj-C 到 Swift 的转换(包括 Cocoapods)的主要内容,如果未能解决你的问题,请参考以下文章

将 Swift 框架导入到 Obj-C

将 sizeWithFont 方法转换为 Swift

Swift 类未添加到 Obj-C 项目中 swift 的自动生成标题中

将objective-c代码转换为swift 4

将 Obj-C 桥接到 Swift 后缺少啥

可互操作的 Obj-C typedef NS_ENUM 到 swift