繁体   English   中英

Swift:在协议扩展中提供默认协议实现

[英]Swift: Providing a default protocol implementation in a protocol extension

我正在尝试使用Swift,协议和协议扩展。 具体来说,我试图在协议扩展中提供协议的默认实现。 这是我的代码:

protocol Proto : class {
    func someMethod() -> String
}

extension Proto {
    static func create() -> Self {
        return ProtoDefaultImpl() as! Self
    }
}

class ProtoDefaultImpl : Proto {
    func someMethod() -> String {
        return "doing something"
    }
}

let instance = Proto.create()
let output = instance.someMethod()

print(output)

编译器在我调用Proto.create()的行上抱怨,出现以下错误:错误: static member 'create' cannot be used on instance of type 'Proto.Protocol'

我错过了什么吗? 有什么办法可以实现吗?

谢谢。

您无法在协议本身上调用该方法,您必须在实现协议的类型上调用它。 这不会改变,因为扩展中存在协议的默认实现。 将您的类型从Proto更改为ProtoDefaultImpl ,它将按预期工作。

protocol Proto : class {
    func someMethod() -> String
}

extension Proto {
    static func create() -> Self {
        return ProtoDefaultImpl() as! Self
    }
}

class ProtoDefaultImpl : Proto {
    func someMethod() -> String {
        return "doing something"
    }
}

let instance = ProtoDefaultImpl.create()
let output = instance.someMethod()

print(output)

这输出: doing something

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM