更新到Swift 3后奇怪的转义功能行为

汉斯·布伦德(Hans Brende)

更新到Swift 3后,我在以下几行代码上遇到了困难:

private var functionHandlers = [(() -> Int) -> ()]()

private var myFunction: (() -> Int)?

func doRegister() {
    functionHandlers.append { (f: (() -> Int)) in
        myFunction = f
    }
}

那给了我编译器错误: Assigning non-escaping parameter 'f' to an escaping closure

因此,我尝试了以下方法:

func doRegister() {
    functionHandlers.append { (f: @escaping (() -> Int)) in
        myFunction = f
    }
}

和这个:

func doRegister() {
    functionHandlers.append { (f: (@escaping () -> Int)) in
        myFunction = f
    }
}

在两种情况下,它都解决了我的第一个错误,但随后又给了我一个新的编译器错误: Cannot convert value of type '(@escaping (() -> Int)) -> ()' to expected argument type '(() -> Int) -> ()'

因此,我尝试functionHandlers如下更改类型

private var functionHandlers = [(@escaping (() -> Int)) -> ()]()

但这只会导致语法错误。

谁能向我解释为什么会这样,我该怎么做才能解决?

哈米什

对我来说似乎是个虫子。由于某些原因,编译器不喜欢该语法:

private var functionHandlers = [(@escaping () -> Int) -> ()]()

但它确实像:

private var functionHandlers : [(@escaping () -> Int) -> ()] = []

这是相同的症状,但是我不确定这与编译器拒绝[TypeA.TypeB]()使用嵌套类型语法的原因相同尽管类似该问题,但解决该问题的另一种方法是使用typealias

typealias F = (@escaping () -> Int) -> ()

private var functionHandlers = [F]()

然后,您可以doRegister()按照正确尝试将其实施为的方式实施:

func doRegister() {
    functionHandlers.append { (f: @escaping () -> Int) in
        myFunction = f
    }
}

虽然你当然应该提交bug报告[(@escaping () -> Int) -> ()]()没有编制。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更新到Swift 3后的问题

来自分类Dev

Swift:更新到 4.2 后无法扩展字典

来自分类Dev

更新到 8.3 Xcode Swift 3.1 后,输入不是 aPCH 文件(swift 编译器错误)

来自分类Dev

奇怪的窗口功能行为

来自分类Dev

使用swift更新到Xcode 6 beta 4后出现dyld_fatal_error

来自分类Dev

更新到15.10后,Atheros AR9485的行为被破坏

来自分类Dev

更新到MAC OS X Mavericks后python3中的奇怪分段错误

来自分类Dev

将功能名称更新到scikit TFIdfVectorizer

来自分类Dev

更新到3.5.0后的Cordova构建错误

来自分类Dev

更新到5.0后的android Mediaplayer错误

来自分类常见问题

更新到3.0后Gradle构建失败

来自分类Dev

更新到XCode 5.1后出现错误

来自分类Dev

更新到4.2后withTrashed()失败

来自分类Dev

错误更新到3.6.1 Anroid的后

来自分类Dev

更新到ChromeDriver 78.0.3904.70后,InvalidArgumentException

来自分类Dev

更新到Angular 9后的reducer问题

来自分类Dev

从14.04更新到18.04后启动卡死

来自分类Dev

从19.04更新到19.10后滞后

来自分类Dev

更新到XCode 6后Moarfonts的问题

来自分类Dev

更新到11.10后的链接问题

来自分类Dev

更新到15.10后无法装入CD

来自分类Dev

从11.04更新到11.10后崩溃

来自分类Dev

更新到16.04后无法关闭xubuntu

来自分类Dev

更新到2.6.3.0版后的Sourcetree问题

来自分类Dev

更新到Xcode 7后出现错误

来自分类Dev

PHPMyAdmin更新到4.8.4后失败

来自分类Dev

更新到16.10后的“绝对”触控板

来自分类Dev

更新到17.10后拔出网络电缆

来自分类Dev

Luks 从 17.10 更新到 18.04 后坏了