热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在参数传递时编译Swift4中的错误

如何解决《在参数传递时编译Swift4中的错误》经验,为你挑选了1个好方法。



1> OOPer..:

在Swift 4中,元组的处理比以往更加严格.

这种封闭类型:(Void)->Void意味着封闭

采用一个参数,其类型是 Void

返回Void,意味着不返回任何值

因此,请尝试以下任何一项:

将值的值传递Void给闭包.(空元组()是唯一的实例Void.)

completion?(())

要不然:

更改参数的类型completion.

func openAnimation(_ completion: (() -> Void)?) {
    //...
}

请记住,两种类型的(Void)->Void()->Void甚至在斯威夫特3.不同的,所以后者将是适当的,如果你打算代表不带参数的闭合型.

此更改是SE-0029的一部分从函数应用程序中删除隐式元组splat行为,据说在Swift 3中实现,但似乎Swift 3尚未完全实现它.


在这里,我向您展示了一个简化的检查代码,您可以在Playground上查看差异.

import Foundation

//### Compiles in Swift 3, error and warning in Swift 4
class MyClass3 {

    func openAnimation(_ completion: ((Void) -> Void)?) {
        DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {

            completion?()
        }
    }

}

//### Compiles both in Swift 3 & 4
class MyClass4 {

    func openAnimation(_ completion: (() -> Void)?) {
        DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {

            completion?()
        }
    }

}


推荐阅读
author-avatar
主宰魔尊_164
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有