我确信我错过了一些非常愚蠢的东西,我总是可以做类似这样的事情,但这次似乎不是。
我有两个类,第一个类是UIView,变量默认为false。第二个类是一个UIViewController,所以我尝试在第二个类中设置变量,但这不起作用。
我正在尝试使用一个可以简单地返回我想要的协议,如果你能告诉我为什么价值为零,我将不胜感激。基本上我的协议的实施有什么问题?
头等舱:
protocol CustomizationDelegate{
func activateCustomization() -> Bool?
}
class FirstClass: UIView, UICollectionViewDelegate, UICollectionViewDataSource , UICollectionViewDelegateFlowLayout{
var modeDelegate: CustomizationDelegate?
var myParam = false
//where I try to print my boolean to the console and I get nil
override init(frame: CGRect) {
super.init(frame : CGRect(x: 0, y: 0, width: 200, height: 400))
//logging to console
let test = self.modeDelegate?.activateCustomization()
print("testing", test )
self.initialSetup()
}
fun initial setup(){
... initialization
}
}
然后在第二堂课我做;
import UIKit
import Firebase
//implementing the protocol
class SecondClass: UIViewController, CustomizationDelegate {
// the first class
lazy var customclass: FirstClass = {
let dv = FirstClass()
//I tried setting it true here
dv.myParam = true
return dv
}()
func activateCustomization() -> Bool? {
return true
}
override func viewDidLoad() {
super.viewDidLoad()
//setting the delegate to self
calendarDayView.modeDelegate = self
firstClass.frame = CGRect(x: 0, y: 40, width: srvceSetupWindow.frame.width, height: srvceSetupWindow.frame.height-80)
//adding fist class as a subview; seems fine except that myParam is still the default ; false
self.addSubview(calendarDayView)
enter code here
...other codes
}
}
我在SO中看过建议,首先如果是亲子关系我可以使用简单的父母!检查以获得相同的实例,但似乎我不能,因为第一类是UIView而不是控制器。
此外,我已经看到了实施协议的建议,因为我正在努力做到这似乎我错过了一些东西。感谢任何评论。感谢。
答案 0 :(得分:0)
您在这里使用了很多变量而没有他们实例化的地方。请发布所有相关代码,而不仅仅是代码段:)您使用calendarDayView
,firstClass
,但只声明customClass
,因此无法知道&# 39;继续他们。
我看到的一个问题是尝试解决此问题:print("testing", test )
可以正常工作。
您好像在这里创建视图:
lazy var customclass: FirstClass = {
let dv = FirstClass()
//I tried setting it true here
dv.myParam = true
return dv
}
但是你永远不会设置代理,并且考虑到你试图在构造函数中打印activateCustomization的结果,代理人除非它有一个值,否则它是不可能的。先前在初始化程序中设置。
你是否有可能将其添加到didSet中的类框架中?