swift - 类似于闭包的弱var之类的东西

标签 swift

我该如何修复这个代码, 不阻止对象

class EIUIBarButtonItem: UIBarButtonItem {
    typealias HandleClosure = (UIBarButtonItem) -> Void
    fileprivate var handle: HandleClosure?
    init(image: UIImage?, style: UIBarButtonItemStyle, handle: HandleClosure? = nil) {
        self.handle = handle
        super.init()
        self.image = image
        self.style = style
        self.target = self
        self.action = #selector(buttonAction(_:))
    }
    // ...OtherCode...        
    @objc func buttonAction(_ sender: UIBarButtonItem) {
        handle?(sender)
    }
}

如果我将此按钮创建为

EIUIBarButtonItem(image: myUIImage, style: .plain, handle: controller.buttonAction)

我阻止了对象 Controller 。我怎样才能做一些这样的事情?我的句柄需要弱变量

   weak var handle: HandleClosure?

或者类似的东西(@unowned)

   EIUIBarButtonItem(image: myUIImage, style: .plain, handle: @unowned controller.buttonAction)

最佳答案

不要直接传递对 Controller 方法的引用,而是将其包装在闭包中。

... handle: { [weak controller] button in controller?.buttonAction(button) })

关于swift - 类似于闭包的弱var之类的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50402707/

相关文章:

ios - 呈现新 VC 时 AdMob GADBannerView 延迟

ios - AudioServicesPlaySystemSound 奇怪的行为

ios - 使用自定义导航栏在导航堆栈中的 Controller 之间进行转换

ios - 无法专门化非泛型类型 'Set'

ios - 我可以在没有动画的情况下更改 strokeEnd 属性吗?

ios - 创建导航栏后,Segue 在 Storyboard中不起作用

swift - 为什么编译器会警告标记为@discardableResult 的函数有未使用的结果?

ios - 如何使用解析终止重复的用户 session ?

ios - 无法更改 watchOS 2 中动画动态图像的持续时间

json - Swift 4 - 无法使用类型为 'encode' 的参数列表调用 '(Codable)'