我在类
中声明了一个协议public protocol demoDelegate {
func willShowdemoResult(DemoGraph: UIView)
}
现在我在声明协议的同一个类中调用它。
public class Demo:UIViewController {
public var delegate : demoDelegate!
//some code
self.delegate.willShowdemoResult(self.demoGraph())
}
其中演示图返回UI图
func demoGraph() -> UIView {
//some code
return demoGraphView
}
我收到一个错误,在包装可选值时意外地发现了nil。我知道我没有初始化代表的原因。有人可以指导我如何在这里初始化代表。
该函数正在其他类中调用
class DemoResult: UIViewController, demoDelegate{
func willShowdemoResult(DemoGraph: UIView)
// some code
}
请帮助
答案 0 :(得分:1)
您收到错误,因为Demo.delegate
在调用时为nil
:
delegate.willShowdemoResult(self.demoGraph())
在进行此调用之前,请确保已设置delegate
属性。我会在初始化Demo
后或DemoResult
获得Demo
- 实例的地址后立即推荐此内容。
假设您在Demo
中存储了DemoResult.demoVC
的实例。然后,您可以在delegate
中设置DemoResult
,如下所示:
demoVC.delegate = self
BTW:最好使用可选类型来存储代理:
public var delegate: demoDelegate?
如果delegate
是可选的,delegate?.willShowdemoResult(self.demoGraph())
如果delegate
尚未初始化,则不会崩溃。