Swift:在协议扩展中提供默认协议实现
我正在尝试使用Swift、协议和协议扩展。具体来说,我试图在协议扩展中提供协议的默认实现。这是我的代码:Swift:在协议扩展中提供默认协议实现,swift,protocols,Swift,Protocols,我正在尝试使用Swift、协议和协议扩展。具体来说,我试图在协议扩展中提供协议的默认实现。这是我的代码: protocol Proto : class { func someMethod() -> String } extension Proto { static func create() -> Self { return ProtoDefaultImpl() as! Self } } class ProtoDefaultImpl : P
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()
的那一行中抱怨,错误如下:静态成员“create”不能用于类型为“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)
这将输出:
做某事
是的,这很有效。我想探讨的是,Proto的用户是否有某种方法可以生成一个实现Proto的对象,而不知道要实例化哪个具体实现。也许某种生产原型实现的工厂更合适?无论如何,谢谢你的回答!