我正在尝试构建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。
任何帮助将不胜感激。
答案 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兼容性问题:
在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
。
但是,这是一个非常奇怪的替代。尚不清楚此代码要实现什么。