gpt4 book ai didi

swift - 不推荐使用未标记的尾随闭包的向后匹配......有什么方法可以使其静音,而不是停止使用尾随闭包?

转载 作者:行者123 更新时间:2023-12-04 17:22:27 26 4
gpt4 key购买 nike

Swift 编译器今天的新功能让我感到惊讶.. 警告:

Backward matching of the unlabeled trailing closure is deprecated; label the argument with 'onSuccess' to suppress this warning
我几乎在任何地方都使用尾随闭包语法,但我看不出这种情况的问题出在哪里。
函数定义如下:
func send<Data>(operation: CSOperation<Data>, title: String, progress: Bool = true,
canCancel: Bool = true, failedDialog: Bool = true, onInternetFailed: (() -> Void)? = nil,
onSuccess: ((Data) -> Void)? = nil) -> CSProcess<Data> {}
它是这样调用的:
send(operation: model.server.downloadCensusDocument(), title: .page_thanks_confirmation_download) {
documentController = UIDocumentInteractionController(url: $0.url)
...
}
编译器要我这样写:
    send(operation: model.server.downloadCensusDocument(), title: .page_thanks_confirmation_download, onSuccess: {
documentController = UIDocumentInteractionController(url: $0.url)
...
})
有什么方法可以让它静音,而不是停止使用尾随闭包?

最佳答案

您可能知道,关键的新功能是 onInternetFailed:函数和 onSuccess:现在允许参数是尾随闭包。多个尾随关闭。规则是,当你这样做时,第一个没有标签,其他的有标签,没有逗号。所以:

send(....) {
// onInternetFailed function body
} onSuccess: {
// onSuccess function body
}
好的,但是这里的问题是:有两个可选的尾随闭包,所以如果你省略了一个,你会省略哪一个?
您假设您省略了第一个。编译器理解你的想法,它允许这种省略,但会发出一个暂时的警告,因为最终它会变得非法——或者,更专业地说,最终会假设被省略的一个是第二个。
因此,为避免出现警告,您必须同时包含两个闭包。
所以,我现在要写
send(operation: model.server.downloadCensusDocument(),
title: .page_thanks_confirmation_download)
{} onSuccess: {
documentController = UIDocumentInteractionController(url: $0.url)
//...
}
这使警告静音,我认为它看起来还不错。两个闭包都跟踪,第一个只是空的。

关于swift - 不推荐使用未标记的尾随闭包的向后匹配......有什么方法可以使其静音,而不是停止使用尾随闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65419138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com