Firebase,Swift:返回类型上的可空性说明符冲突,“可空”与现有说明符“非空”冲突

Posted

技术标签:

【中文标题】Firebase,Swift:返回类型上的可空性说明符冲突,“可空”与现有说明符“非空”冲突【英文标题】:Firebase, Swift : Conflicting nullability specifier on return types, 'nullable' conflicts with existing specifier 'nonnull' 【发布时间】:2016-09-19 01:23:04 【问题描述】:

Firebase 3.6.0 中的警告。 Xcode 8 - 斯威夫特 3。

这些是 Firebase 类:-

@class FIROptions @class FIRAuthCredential @class FIRUserProfileChangeRequest

警告信息:

(可为空的实例类型)init NS_UNAVAILABLE;

认为这可能是一个错误!

如果没有,有什么解决方法的想法吗?

【问题讨论】:

可能与某些 Swift 3 API 冲突,因为我也遇到了错误。 删除可为空的注释将是解决方案之一。但是github.com/firebase/FirebaseUI-ios/issues/166 报告了同样的问题。所以,我认为它会尽快解决。 确保在AppDelegate的'didFinishLaunchingWithOptions'方法下添加FIRApp.configure(),如果没有,可能会解决问题。 【参考方案1】:

原始答案:从最新的 Firebase (3.7.1) 开始,我已解决此问题。只需执行“pod update Firebase”,然后清理您的项目(确保通过 Option 键清理构建文件夹)。

更新的答案:不,我的错……问题仍然存在。

进一步挖掘,这里有一个很好的解释:https://***.com/a/39233507/3638762

与此同时(因为我对让您抱有希望而感到难过)我找到了一种抑制警告的好方法。我不得不猜测 -Wnullability 警告类型。 ;-)

在 Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRApp.h 中的违规行周围添加这三个 #pragma 行:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnullability"
- (nullable instancetype)init NS_UNAVAILABLE;
#pragma clang diagnostic pop

干杯!

【讨论】:

我不知道为什么,但我仍然收到这些警告 即使是 3.7.1 版本也是如此。 我也是!在问题得到解决之前,我已经用一种方便的解决方法更新了我的答案。 感谢分享这个warby。我的问题是,正如 Ken Tan 所提到的,由于这个错误,我无法进行整个模块优化。即使有这种解决方法,它仍然对我不起作用。 这也帮助我使用了 AFNetworking 2.0(没有警告)...谢谢!【参考方案2】:

这是解决方案构建设置 -> 代码签名身份 -> 将调试和发布更改为 iOS 开发人员。

【讨论】:

【参考方案3】:

在等待 Firebase 团队解决此错误时,您可以考虑将 Build Settings 中的 Swift Optimization Level 更改为 None

请注意,这是一种临时解决方法。请在 Firebase 发布修复后将其切换回 Fast, Whole Module Optimization

【讨论】:

您可能更喜欢我的回答中的解决方法,因为它只影响一个违规行而不是整个项目。 XCode 为我提供了编辑锁定文件的选项,并且编辑工作正常。【参考方案4】:

在我的情况下,我去了构建设置 -> 代码签名身份 -> 将调试和发布更改为 iOS 开发人员。

【讨论】:

【参考方案5】:

转到您的 Pod -> 构建设置 -> 使用旧版 Swift 语言版本并将其设置为否,这对我有用。

清理您的项目并构建。

我能够多次重现警告并进行修复。

【讨论】:

【参考方案6】:

firebase 4.0.4 解决了这个问题,只要确保在应用委托的 didFinishLaunchingWithOptions 函数中写“FirebaseApp.configure()”,而不是旧的“FIRApp.configure()”

祝你好运

【讨论】:

【参考方案7】:

清除派生数据文件夹和清理似乎使这些错误对我来说消失了。如果您看到“停止!!将从内存中重置 deviceID。”同样,在 Capabilities 中启用 Keychain Sharing。

【讨论】:

它在我身边不起作用。这似乎更像是 Swift 3.0 更新后的 Firebase 错误。

以上是关于Firebase,Swift:返回类型上的可空性说明符冲突,“可空”与现有说明符“非空”冲突的主要内容,如果未能解决你的问题,请参考以下文章

可空引用类型 - 通过接受的参数返回类型可空性

学习Swift -- 可选链

我可以更改 Spark 数据框中列的可空性吗?

Kotlin中与Java互操作与可空性类型映射属性访问@JvmOverloads@JvmField@JvmStatic@Throws和函数类型操作详解

Pyspark 模式:如何检查可空性?

KotlinKotlin 与 Java 互操作 ① ( 变量可空性 | Kotlin 类型映射 | Kotlin 访问私有属性 | Java 调用 Kotlin 函数 )