加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:24:08 所属栏目:百科 来源:网络整理
导读:我有这个原型的功能: func myFunction(completionHandler:((响应:[NSString:AnyObject]) – Void)?)) completionHandler原型可以作为闭包或作为函数传递…将其作为闭包传递我知道如何使用此语法定义捕获列表[weak self],但如果不直接定义闭包,我如何定
我有这个原型的功能:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读