如您所说,编译器永远不会崩溃;这确实是一个错误,已在此处提交。Swift团队成员Slava
Pestov在其中说:
我们计划使MyProtocol.someInstanceMethod工作。您已经可以在课程中执行此 *** 作,例如,
class Foo { func f() { ... }}let f: Foo -> () -> () = Foo.f它对于协议应该具有相同的行为:
protocol Foo { func f()}let f: Foo -> () -> () = Foo.f我计划稍后再解决。
到2017年5月8日为止,该错误报告现已标记为“进行中”,因此希望可以将其纳入Swift 4.0的发行版中。
但是,在实现/修复之前,一个简单的解决方法是使用闭包表达式,以便对使用实例的方法进行部分应用来充当thunk:
protocol Test { func f()}struct S : Test { func f() { print("hello") }}let x: (Test) -> () -> Void = {let x: (Test) -> Void = { .f() }let s = S()x(s) // "hello".f }let s = S()x(s)() // "hello"
当然,如果不需要中间部分应用的函数,则可以说:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)