Swift协议定义返回self的类方法

Sta*_*iak 6 protocols swift

我的代码在XCode 6 beta中运行,但在更新到xcode 6.1之后最近停止了工作.

这是我的协议:

protocol CanDeserialiseFromJson {
    class func FromJson(json : JSONValue) -> Self
}
Run Code Online (Sandbox Code Playgroud)

这是实施:

extension Invoice : CanDeserialiseFromJson {
    class func FromJson(json : JSONValue) -> Self {
        return Invoice()
    }
}
Run Code Online (Sandbox Code Playgroud)

这没有给出错误:

'Invoice' is not convertable to 'Self'
Run Code Online (Sandbox Code Playgroud)

正如我所说,这曾经工作,我无法解决为什么它不再存在

ric*_*ter 2

Self协议中要求协议的实现使用自己的类型。由于Invoice是您采用协议的类型,因此您的实现FromJson应该具有返回类型Invoice

  • 我将发票类标记为最终类,它似乎有效 (6认同)
  • 如果我不想将其标记为“final”,该怎么办? (3认同)