为什么在返回' Self?'的具体类上进行显式静态调用?失败转换,但对同一方法的隐式静态调用工作正常?

时间:2018-01-10 20:23:47

标签: swift swift-protocols swift-extensions

鉴于以下课程......

final class MyClass : Codable {
    var someDate:Date
}

这个扩展就可以了......

extension Decodable{

    static func decodeFromJson(_ json:Data?) -> Self?{
        return nil // Implementation not needed for example
    }

    static func decodeFromJson(_ json:Data?, withDateFormat dateFormat:String) -> Self?{
        return nil // Implementation not needed for example
    }
}

直接针对MyClass ...

撰写扩展程序时
extension MyClass{

    static func decodeFromJson(_ json:Data?) -> Self?{

        let dateFormat = "yyyy-MM-dd"

        // This line won't compile
        // return MyClass.decodeFromJson(json, withDateFormat:dateFormat) 

        // This line compiles just fine
        return decodeFromJson(json, withDateFormat:dateFormat)
    }
}

上面没有编译的行会给你这个错误

Cannot convert return expression of type 'MyClass?' to return type 'Self?'

我发现后者有效,这是一次意外。我以为我是DOA。

那么为什么后者起作用而前者不起作用呢?

0 个答案:

没有答案