gpt4 book ai didi

swift - 非转义参数的闭包使用 - Swift 3 问题

转载 作者:搜寻专家 更新时间:2023-10-31 22:44:37 26 4
gpt4 key购买 nike

我知道 Swift 3 中的更改,其中 @nonescaping 是闭包的默认行为。

我已经成功地更改了很多关于更改的代码,但是我的代码的一部分我无法摆脱 Closure use of non-escaping parameter may allow it to escape 编译错误。

我已经尝试将 @escaping 添加到 updateHandler 参数和 UpdatedInProgressHandler 类型别名,但这似乎还不够。

谁能帮我找出问题的原因?

定义别名和函数的代码:

// Typealiases used to clean up closures
typealias UpdateInProgressCompletion = () -> ()
typealias UpdateInProgressCancelCompletion = () -> ()
typealias UpdateInProgressHandler = ((_ completed: @escaping UpdateInProgressCompletion) -> ()) -> ()

// Method for wrapping the presentation and dismissal of the custom alert controller
func presentUpdateInProgress(_ taskIdentifier: String?, alertMessage: String?, alertHeader: String? = nil, updateHandler: @escaping UpdateInProgressHandler, cancel cancelHandler: UpdateInProgressCancelCompletion? = nil) {

let updateInProgressAlert = self.updateInProgressAlert( taskIdentifier, alertMessage: alertMessage, alertHeader: alertHeader ) { action in
cancelHandler?()
Logger.debug("User cancelled update")
}

updateInProgressAlert.present(completion: nil)

updateHandler { (completion) in
updateInProgressAlert.dismiss(completion: completion)
}
}

调用 presentUpdateInProgress 函数时出现“关闭使用非转义参数“updateCompleted”可能允许转义”错误的代码。

    self.presentUpdateInProgress(taskIdentifier, alertMessage: "My alert message", updateHandler: { (updateCompleted) -> () in

let task = CreateModelTask(completionHandler: { (resultObject) -> () in
updateCompleted { // this generates the error

//Do some stuff with received result
}
})

task.taskIdentifier = taskIdentifier
SyncManager.sharedManager.addTaskToQueue(task)
})

最佳答案

updateCompleted(_ completed: @escaping UpdateInProgressCompletion) -> () 类型,因为它是一个函数参数本身,意味着默认情况下它是非转义的(请注意,“默认情况下非转义”行为仅适用于函数闭包参数,请参阅 this Q&A 以及关于该主题的 its dupe target)。

因此为了让updateCompleted转义,需要将(_ completed: @escaping UpdateInProgressCompletion) -> ()标记为@escaping 在你的 typealias 中:

typealias UpdateInProgressHandler = (<b>@escaping</b> (_ completed: @escaping UpdateInProgressCompletion) -> ()) -> ()

关于swift - 非转义参数的闭包使用 - Swift 3 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40257271/

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