有一个带有内部类的类。内部类需要调用外部类中定义的委托。我发现有question关于从内部类访问类的知识,这使我朝着正确的方向前进。不幸的是,我没有发现有关使用协议执行此操作的任何问题。当运行时,内部类中的外部类始终为nil。这是代码
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
}
}
抛出零的区域是
if hasCallBack { outer.delegate?.afterSetting() }
我确实尝试在实例上定义内部对象的父对象(实例?.outer = self),但是它给了我消息“无法将CallBack.Type类型的值分配给CallBack类型。然后,我采用了初始化方式尝试许多其他方式。
对于获得解决方案的任何建议/协助,我们深表感谢。
答案 0 :(得分:0)
您可能会忘记初始化委托?它已声明,但您从未为变量设置值。