首页 > 解决方案 > 从内部类调用委托

问题描述

有一个带有内部类的类。内部类需要调用外部类中定义的委托。我发现了一个关于从内部类访问类的问题,它让我朝着正确的方向前进。不幸的是,我没有发现任何关于使用协议执行此操作的问题。运行时,内部类中的外部类始终为零。这是代码

protocol CallBackDelegate {
    func afterSetting()
}

public class CallBack {
  fileprivate static var instance: inner?
  var delegate: CallBackDelegate?
  var outer: CallBack?

  @discardableResult
  public static func show(text: String, _ callBack: Bool = false) -> Bool{
    instance = inner(text: text, callBack)
    instance?.callBack()
    return true
  }


  fileprivate class inner: UIView {
    var hasCallBack = false
    var textLabel: UILabel!

    convenience init(text: String, callBack: Bool) {
        self.init(frame: CGRect(x: 0, y: 0, width: 120, height: 120))

        textLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.frame.size.width, height: 20))
        textLabel.textAlignment = .center
        textLabel.text = text

        hasCallBack = callBack
    }

    func callBack() {
        addSubview(textLabel)
        if hasCallBack { outer.delegate?.afterSetting() }
    }
  }


  init() {
    outer = self
  }
}

抛 nil 的面积是

if hasCallBack { outer.delegate?.afterSetting() }

我确实尝试将父级定义为实例的内部(instance?.outer = self),但它给了我“无法将 CallBack.Type 类型的值分配给 CallBack 类型的消息。然后我在尝试了许多其他方法后采用了 init 方式方法。

任何建议/帮助都非常感谢您找到解决方案。

标签: swift

解决方案


您可能忘记初始化委托?它已声明,但您从未为变量设置值。


推荐阅读