首页 > 解决方案 > 如何创建一个将弱自我传递到闭包内部的闭包签名

问题描述

我创建了一个名为 的类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。

谢谢。

标签: iosswiftcocoaswift4swift5

解决方案


当你打电话时,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 或任何闭包时使用的东西


推荐阅读