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:返回类型上的可空性说明符冲突,“可空”与现有说明符“非空”冲突的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin中与Java互操作与可空性类型映射属性访问@JvmOverloads@JvmField@JvmStatic@Throws和函数类型操作详解
KotlinKotlin 与 Java 互操作 ① ( 变量可空性 | Kotlin 类型映射 | Kotlin 访问私有属性 | Java 调用 Kotlin 函数 )