ios - 如何创建一个将弱自我传递到闭包内部的闭包签名
问题描述
我创建了一个名为 的类VerifyObject
,其中包含一个具有以下签名的函数
typealias handlerCodeID = (String) ->Void
typealias handlerCode = (Date, Code) ->Void
typealias handlerError = (NSError) ->Void
class func verifyObject(withID:String?,
runOnEnter: handlerCode?,
runOnExit: handlerCode?,
runOnPause: handlerCodeID?,
runOnError: handlerError?)
当我运行这些runOn...
闭包时,我会遇到需要self
在闭包内部使用引用、捕获自我和创建泄漏的情况。
我已经阅读了我能找到的关于weak self
在 swift 上创建的所有内容,但是文本太开放了,以至于我无法理解。
我知道objective-c方式,但这在swift上被认为是异端。
我如何创建这些typealias
或函数签名或任何将弱自我传递到这 4 个闭包中的每一个。
请像我5岁一样解释。好的,搞定4。
谢谢。
解决方案
当你打电话时,handleCodeID
你可以通过weak self
,这样你就可以删除任何强引用循环。
所以当你打电话时,verifyObject(...)
它会像......
Self.verifyObject(“someString”, { [weak self] date, code in
//runonenter
},
{ [weak self] date, code in
//runonexit
},
{ [weak self] string in
//runonpause
},
{ [weak self] error in
//runonerrir
})
你可以继续这个
typealias 实际上并不包含这个,它是你在调用指定的 typealias 或任何闭包时使用的东西
推荐阅读
- numpy - 按 ndarray 的值对索引进行采样的更快解决方案
- blockchain - 加密钱包“Exodus”会泄露你的 IP 地址吗?
- dataframe - 如何使用 geom_line 连接多个连续的缺失数据值?
- sql - 在子查询和别名中排序
- javascript - 使用 jQuery 添加产品后在 Magento 1.9 中禁用重定向到结帐
- c# - 按分组数据网格 WPF 中的选定列排序
- python - 如何使用 TemplateView 使用表单中的输入数据
- node.js - Outlook 无法像 gmail 一样正确读取 ics 文件
- mongodb - 我怎么知道 Mongodb 查询在哪个节点上运行?
- django - ModelForm 显示下拉菜单而不是新表单