升级Xcode后如何修复'无法用非自返回类型覆盖自返回类型'

时间:2019-03-28 19:24:10

标签: swift amazon-web-services xcode10.2

我正在尝试构建iOS AWS应用程序,但遇到了一些问题。

我刚刚将Xcode更新到版本10.2,并创建了一个全新的项目。我正在尝试使用CocoaPods安装依赖项以进行用户身份验证。修改我的Podfile使其包含AWSMobileClient(并按照AWS文档所述运行pod install --repo-update之后),我在此功能的AWSMobileClient.swift中收到构建错误:

@objc override public class func sharedInstance() -> AWSMobileClient {
   return _sharedInstance
}

错误说明:

Cannot override a Self return type with a non-Self return type

我真该死,这时我唯一想做的就是回到Xcode 10.1。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

作为临时解决方案,请方法的类为最终结果。 例如,AWSMobileClient现在是:

public class AWSMobileClient: _AWSMobileClient {

对此进行更改:

public final class AWSMobileClient: _AWSMobileClient {

然后等待AWS修复。

答案 1 :(得分:3)

我们遇到了这个问题,但不愿直接编辑AWSMobileClient。

将Project和Target的Swift Language版本设置为4.2,并在Pod文件中指定:

await myBackgroundWorker.StopAsync();

为我们工作以允许再次建造。作为Swift 5兼容性问题:

SR-695

在Swift 5模式下,返回Self的类方法不再可以使用返回非最终具体类类型的方法覆盖。此类代码类型不安全,需要进行更新。

答案 2 :(得分:2)

如错误所示,如果课程不是最终课程,则需要在此处返回Self

@objc override public class func sharedInstance() -> Self { return _sharedInstance }

(假设_sharedInstance的类型为Self。)

或者,您可以修改超类而不返回Self,而是返回特定类型(可能是其自身的类型)。

@objc public class func sharedInstance() -> TheActualClass { return _sharedInstance }

(在这种情况下,所有子类也需要返回TheActualClass。我假设该类是AWSMobileClient。)

因为这是一个框架,所以我希望它可以由供应商修复,并且我将确保您正在运行框架的最新版本。

Self表示此方法返回正在调用的类的类型的值。因此,如果您有SomeClass.sharedInstance(),则必须返回SomeClass。但是,如果您将其子类化,则对SubClass.sharedInstance()的调用必须返回SubClass。如果无法实现,则需要做一些最终决定,否则不返回Self

但是,这是一个非常奇怪的替代。尚不清楚此代码要实现什么。