从协议扩展实例方法中读取静态var

Dov*_*Dov 6 swift swift-protocols

假设我们有一个Swift协议:

protocol SomeProtocol: class {
    static var someString: String { get }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法someString从扩展实例方法访问,像这样?

extension SomeProtocol {
    public func doSomething() -> String {
        return "I'm a \(someString)"
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到编译器错误:

静态成员'someString'不能用于'Self'类型的实例

有没有办法实现这个目标?

Dov*_*Dov 6

你需要参考someStringSelf(注意大写S):

extension SomeProtocol {
    public func doSomething() -> String {
        return "I'm a \(Self.someString)"
    }
}
Run Code Online (Sandbox Code Playgroud)