Swift学习练手中的点点滴滴

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
喜欢就支持一下吧
点赞0 分享