捕获列表和函数在swift中作为参数传递
我有这个原型的功能:
func myFunction(completionHandler:((响应:[NSString:AnyObject]) – > Void)?)) completionHandler原型可以作为闭包或作为函数传递…将其作为闭包传递我知道如何使用此语法定义捕获列表[weak self],但如果不直接定义闭包,我如何定义捕获列表?在函数参数中我想传递一个函数名? myFunction(anotherFunction)//如何从这里设置捕获列表? VS myFunction{ [weak self] (response) in } “` 编辑 – – – 一个可能的解决方案是将功能代码包装到一个块中,设置捕获列表并执行块…但听起来很奇怪:/ myFunction(anotherFunction) // how to set capture list from here? . . . func anotherFunction(response:[NSString:AnyObject]) { let safeBlock = { [weak self] in { self?.callSomethingSafely() } } safeBlock() }
编辑(基于以下Hamish的修正):
我不知道强制引用方法在内部使用捕获变量的弱版本的方法.正如您在示例中所做的那样,实际的方法实现是否可以实现. 但是,值得注意的是,除非您要无限期地存储对该完成处理程序的引用,否则您不必担心弱自我. 我假设一旦myFunction启动的一些异步任务完成,就会调用完成处理程序.在这种情况下,完成处理程序捕获的任何引用只会在完成处理程序运行之前保留.然后这些引用将被释放,并且不会有任何保留周期.如果“自我”保持闭合并且闭合捕获“自我”,则设置循环参考/保留循环,那么闭合中的弱自我是唯一重要的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |