1、NSClassFromString
guard let workName = Bundle.main.infoDictionary!["CFBundleExecutable"] else {
print("命名空间不存在")
return
}
let cls: AnyClass? = NSClassFromString("\(workName as! String).\(vcs[indexPath.row])")
guard let vc = cls as? UIViewController.Type else {
print("转成VC失败")
return
}
navigationController?.pushViewController(vc.init(), animated: true)
复制代码
使用 NSClassFromString 时,需要拼接 项目名称,否则返回为nil,因为 存在 命名空间的原因
2、Timer
计时器,监听 count,使用didSet,相应的,还有 willSet方法
var count: Float = 0.0 {
didSet(oldValue) {
view1.text = String(format: "%.1f", count)
}
}
复制代码
这里使用到了,如何只打印一位小数。
暂停定时器
@objc func end() {
if state == .end {
return
}
state = .end
timer?.fireDate = Date.distantFuture // **
}
复制代码
继续定时器
@objc func start() {
if state == .start {
return
}
if timer == nil {
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(change), userInfo: nil, repeats: true)
}
state = .start
timer?.fireDate = Date.distantPast
}
复制代码
重置
@objc func reset() {
if state == .reset {
return
}
state = .reset
count = 0.0
timer?.invalidate()
timer = nil
}
复制代码
@objc 表示 这是一个 oc的方法,因为 button 在初始化时,添加方法
view2.addTarget(self, action: #selector(start), for: .touchUpInside)
复制代码
要注意 timer的循环引用,可以采用oc的方法。判断页面有没有释放,在如下方法内打印判断
deinit {
print("deinit")
}
复制代码
未完待续。。。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END