捕获列表和函数在swift中作为参数传递

前端之家收集整理的这篇文章主要介绍了捕获列表和函数在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启动的一些异步任务完成,就会调用完成处理程序.在这种情况下,完成处理程序捕获的任何引用只会在完成处理程序运行之前保留.然后这些引用将被释放,并且不会有任何保留周期.如果“自我”保持闭合并且闭合捕获“自我”,则设置循环参考/保留循环,那么闭合中的弱自我是唯一重要的.

原文链接:https://www.f2er.com/swift/319067.html

猜你在找的Swift相关文章