swift - 从内部类调用委托
问题描述
有一个带有内部类的类。内部类需要调用外部类中定义的委托。我发现了一个关于从内部类访问类的问题,它让我朝着正确的方向前进。不幸的是,我没有发现任何关于使用协议执行此操作的问题。运行时,内部类中的外部类始终为零。这是代码
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 方式方法。
任何建议/帮助都非常感谢您找到解决方案。
解决方案
您可能忘记初始化委托?它已声明,但您从未为变量设置值。
推荐阅读
- php - 在 yii2 中创建新控制器时找不到页面
- python - Python将字符串列导出到excel
- javascript - 如何在数组中添加、追加和加入每个项目?
- java - Java调用方法而不等待响应
- python - 使用python访问内网webservice
- javascript - 如何将从json文件中获取的值转换为javascript中的列表
- java - Firebase 不允许我添加新字段
- installation - ninja 将其默认安装路径附加到我的 DESTDIR
- c++ - 发送 struct UDP socket 两次而不是一次
- amazon-s3 - S3 对象拒绝访问 - 这些对象来自另一个账户的 AWS CodeBuild 项目