swift - 从协议(protocol)扩展实例方法中读取静态变量

标签 swift swift-protocols

假设我们有一个 Swift 协议(protocol):

protocol SomeProtocol: class {
    static var someString: String { get }
}

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

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

我得到一个编译器错误:

Static member 'someString' cannot be used on instance of type 'Self'

有什么办法可以做到这一点吗?

最佳答案

您需要使用 Self 引用 someString(注意大写 S):

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

关于swift - 从协议(protocol)扩展实例方法中读取静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34298173/

相关文章:

iphone - 链接器命令失败,PubNub 库在 swift 和静态框架中

SWIFT 线程 1 : Fatal error: Index out of range: Sections & Rows

objective-c - 如何从闭包中强制捕获?

Xcode 在处理 swift 文件时崩溃

ios - 弹出包含 ARKit 场景 View 的 View Controller 后,应用程序停止响应触摸

swift - 何时在 Swift 中使用协议(protocol)

swift 。 unowned 只能应用于类和类绑定(bind)协议(protocol)类型。弱工作正常

带有 where 子句的 Swift 数组扩展不适用于子协议(protocol)

swift - 我可以在协议(protocol)中有一个初始化函数吗?

协议(protocol)中的 Swift 协议(protocol)属性 - 候选人具有不匹配的类型