繁体   English   中英

如何使使用 Callable (callAsFunction()) 的结构与协议一起工作?

[英]How to make a struct that uses Callable (callAsFunction()) works with protocol?

我试图在直接使用protocoldependency injection时使callAsFunction()工作,但protocol instance似乎不知道Callable功能。 我尝试在protocol decorating中添加func callAsFunction() ,但它也不起作用。 正如您在下面的示例代码中看到的,在使用具体结构创建实例时,我可以使用callAsFunction() ,但不能使用协议实例。

protocol Decorating {
  //to implement
}

struct Decorate: Decorating {
 func callAsFunction() {
    print("Decorated!")
 }
}

let decorate: Decorate = Decorate()
decorate() //worked

let decorate2: Decorating = Decorate()
decorate2() //failed

你可以扩展你的协议:

protocol Decorating {

}

extension Decorating {
    func callAsFunction() -> {
        // Your code
    }
}

使用示例:

protocol Decorating {
    var foo: Foo
}

extension Decorating {
    func callAsFunction() -> {
        foo.foo()
    }
}

let decorate: Decorating = Decorate()
decorate()

暂无
暂无

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

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