从swift协议存储/传递函数类型
发布时间:2020-12-14 05:46:36 所属栏目:百科 来源:网络整理
导读:这段代码崩溃了swift(3,3.1,4)编译器: protocol Test { func f()}let x = Test.f // crash 我希望,也许是天真的,编译器会将x推断为带有签名的函数类型(Test) – (虚空) – 无效,以后,我可以这样称呼它: let y = SomeClassConformingToTest()x(y)() 我想我
这段代码崩溃了swift(3,3.1,4)编译器:
protocol Test { func f() } let x = Test.f // crash 我希望,也许是天真的,编译器会将x推断为带有签名的函数类型(Test) – > (虚空) – >无效,以后,我可以这样称呼它: let y = SomeClassConformingToTest() x(y)() 我想我的问题是:显然编译器应该做除崩溃之外的事情,但Swift目前是否支持这种语法?
如你所说,编译器永远不会崩溃;这确实是一个错误,has been filed here.其中,Swift团队成员Slava Pestov说:
截至2017年5月8日,错误报告现已标记为“进行中”,因此希望这将成为Swift 4.0的发布版本. 但是,在实现/修复之前 – 一个简单的解决方法就是使用闭包表达式,以便充当部分应用方法的thunk,并使用实例调用它: protocol Test { func f() } struct S : Test { func f() { print("hello") } } let x: (Test) -> () -> Void = { $0.f } let s = S() x(s)() // "hello" 当然,如果你不需要中间部分应用功能,你可以说: let x: (Test) -> Void = { $0.f() } let s = S() x(s) // "hello" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- cocos2dx 在 Mac 下创建 lua 工程总结
- swfupload firefox上传文件时,报302 或server i
- 在解析xml文件中的网址时,出现如下错误: org.ap
- ruby-on-rails – 全局禁用Rails SQL查询缓存
- Oracle 之 管理
- postgresql – 如何在Odoo 8中创建One2one关系?
- c# – 为什么LINQ FirstOrDefault或First生成的调
- context.xml的作用和应用的version版本(Tomcat的
- 如何在SQLite中创建自增字段?
- c -cli – C/C++LI:Console :: WriteLine()或co
热点阅读